1
pc10201 2016-07-16 22:07:04 +08:00
建议写成一个 shell 脚本,然后在 rc.local 中 bash xx.sh 这个脚本
另外脚本中的命令最好是用全路径,环境变量也要 export 导入一下,不然会出现有些命令找不到的情况 |
2
chzyer 2016-07-16 22:47:01 +08:00
建议将 stderr 和 stdout 都重定向到文件,这样就可以看 log 了,有了 log 就能知道为什么出错了,一般是环境不一致的问题
|
3
kaneg 2016-07-16 23:13:41 +08:00 1
用 lsb_release -a
|
4
billlee 2016-07-16 23:39:04 +08:00 1
如果有 init 是 systemd 或者 upstart, 建议还是不要用 rc.local. Sys V init 的环境控制和日志输出都比较麻烦,难调试
|
5
matthewgao 2016-07-16 23:39:05 +08:00 1
你监控的那个 Daemon 有没有 fork 两次,听起来可能是 session leader 的事情,你用脚本运行的 session leader 是你的脚本的 shell , session leader 退出会导致这个 session 下的进程全部退出
|
6
lilifenghao44 OP @matthewgao 加了&不是会被放到 pstree 的 init 下面么?不应该因为脚本关闭,而关闭被打开的进程啊.
|
7
lilifenghao44 OP @billlee 那我现在的问题应该怎么解决呢..
|
8
matthewgao 2016-07-17 15:18:09 +08:00 1
@lilifenghao44 &只是放在后台,但是运行它的 shell 是它的父进程,并且父进程是 session leader ,你试下用& 打开一个窗口的程序,然后你关掉那个 shell ,窗口会跟着一块退出的
nohup 也只是忽略 HUP 的信号,所以也打不到你那个效果 |
9
nisbme 2016-07-17 16:08:56 +08:00 1
(ss-redir xxxxx &) 这样就可以了
|
10
lilifenghao44 OP @matthewgao 感谢帮助,可否推荐 linux 相关书籍,我最近在学.
|
11
lilifenghao44 OP @nisbme 加上(命令),在 rc.local 执行完后依旧没有进程
|
12
matthewgao 2016-07-17 17:52:37 +08:00
@lilifenghao44
UNIX 环境高级编程(第 3 版) [Advanced Programming in the UNIX Environment, Third Edition] |
13
matthewgao 2016-07-17 17:53:55 +08:00
@lilifenghao44 我隐约记得 rc.local 里应该用 exec (命令)?
|
14
billlee 2016-07-17 18:02:48 +08:00
@lilifenghao44 我也不知道你的系统是 Sys V init 还是新的的 init. 你可以 man init 看以下,如果是 systemd, 我可以帮你写一个。如果是 upstart, 你要自己参考 man page 或者 /etc/init 下面的其它服务写一个(我手上没有用 upstart 的机器)。如果是 Sys V init, 我建议你使用 supervisor.
古老的 Sys V init 确实很难用,如果是自己部署,不是需要考虑兼容发布出去给别人用的情况,我都不建议使用 Sys V init. |
15
billlee 2016-07-17 18:04:06 +08:00
@matthewgao 应该不是 exec 吧,这是调用 execve (2) 的,用了当前 shell 进程就被替换掉了
|
16
matthewgao 2016-07-17 18:25:15 +08:00
@billlee 是的,我记不太清了,反正有些是用 exec 的,忘记 rc 里面是怎么配的了
|