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

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

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

然后 systemctl start/stop/restart /enable/disable app 就可以操作了
fingerstyle
2017-02-16 19:57:51 +08:00
不是 supervisor ,主要是想让进程完全脱离终端,忽略 HUP 信号

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

感谢大家的指点
kiwi95
2017-02-16 20:02:31 +08:00
楼主的需求 tmux 应该可以吧,也许楼主应该再说明白一点
jimzhong
2017-02-16 20:12:31 +08:00
用 tmux 吧。
daemon 可以自己在程序中实现, fork 后关掉 stdin ,重定向 stdout/err ,并 setuid 。
hosiet
2017-02-16 20:27:44 +08:00
既然是可以自己修改的 shell 脚本,可以用最经典的两次 fork 守护进程化的标准做法。如果是其它情况的话,加一层 wrapper 当然也可以。
hosiet
2017-02-16 20:32:02 +08:00
看你的发行版,还可能有个神奇玩意叫做 start-stop-daemon
azh7138m
2017-02-17 01:50:13 +08:00
@hosiet 自己编译下就行,不用看发行版,就一个文件,挺好用的
fxxkgw
2017-02-17 10:29:26 +08:00
setsid 应该可以。。
Osk
2017-02-19 01:21:10 +08:00
```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-02-19 16:44:27 +08:00
我直接用 screen

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

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

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

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

© 2021 V2EX