Shell 脚本除了 nohup & 还有别的办法做后台进程吗?

2017 年 2 月 16 日
 fingerstyle
可以调用系统的 daemon 接口来执行 shell 脚本吗?
6376 次点击
所在节点    Linux
15 条回复
Livid
2017 年 2 月 16 日
thekoc
2017 年 2 月 16 日
你要的是这种东西么?
http://supervisord.org
skydiver
2017 年 2 月 16 日
输出重定向到文件后台运行然后 disown
tmux 或者 screen 里运行
skydiver
2017 年 2 月 16 日
另外还可以写成 service 文件(sysvinit 或者 systemd)然后运行
ProjectAmber
2017 年 2 月 16 日
systemd 。
xialdj
2017 年 2 月 16 日
systemd +1

写成配置文件 app.service 放到 systemd 文件夹

然后 systemctl start/stop/restart /enable/disable app 就可以操作了
fingerstyle
2017 年 2 月 16 日
不是 supervisor ,主要是想让进程完全脱离终端,忽略 HUP 信号

现在在尝试 setsid 如果不行的话试试 systemd

感谢大家的指点
kiwi95
2017 年 2 月 16 日
楼主的需求 tmux 应该可以吧,也许楼主应该再说明白一点
jimzhong
2017 年 2 月 16 日
用 tmux 吧。
daemon 可以自己在程序中实现, fork 后关掉 stdin ,重定向 stdout/err ,并 setuid 。
hosiet
2017 年 2 月 16 日
既然是可以自己修改的 shell 脚本,可以用最经典的两次 fork 守护进程化的标准做法。如果是其它情况的话,加一层 wrapper 当然也可以。
hosiet
2017 年 2 月 16 日
看你的发行版,还可能有个神奇玩意叫做 start-stop-daemon
azh7138m
2017 年 2 月 17 日
@hosiet 自己编译下就行,不用看发行版,就一个文件,挺好用的
fxxkgw
2017 年 2 月 17 日
setsid 应该可以。。
Osk
2017 年 2 月 19 日
```shell
#!/bin/bash

trap " " SIGHUP

function check_()
{
if [ "$RUN_BACKGROUND" != 1 ]
then
export RUN_BACKGROUND=1
$0 $@ &
exit 0
fi
}

check_

do_yout_evil

```
启动它的 shell 挂了它也能继续后台正常运行
Langley
2017 年 2 月 19 日
我直接用 screen

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/340979

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX