如何让脚本继续后台运行,哪怕关掉了终端
先贴出我的 shell 脚本(listen.sh)
#!/bin/bash
WEBPATH=/path/to/site
while true
do
killall 'nc' >/dev/null 2>&1
nc -l 10086 | while read line
do
pass=`cat /dev/urandom | head -1 | md5sum | head -c 8`
echo $pass>/root/userpass/${line}.txt
echo $pass>>/root/userpass/${line}.txt
useradd -d ${WEBPATH}/super_${line}_appjx_cn -g root ${line}
cat /root/userpass/${line}.txt | passwd ${line} >/dev/null 2>&1
/usr/bin/php /root/addpass.php ${line} ${pass} >/dev/null 2>&1
cd ${WEBPATH}
chmod 775 ${WEBPATH}/super_${line}_appjx_cn
killall 'nc' >/dev/null 2>&1
done
done
尝试了以下方法:
./listen.sh &
nohup ./listen.sh &
/root/listen.sh &
但都无法达到要求。而且很奇怪的是,这样执行之后,ps能够看到两个listen.sh进程,一时搞不懂是为什么。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
我用的是screen
如果需要保留输出,或者脚本太脆弱遇到输入输出错误就挂掉,记得进行适当的重定向。
另外,就像有人提到的,你也许需要的是 supervisord 这类工具而不是你说的需求。参见 X-Y Problem | 酷 壳 - CoolShell.cn。
简单的比如nohup
其它的可以用supervisord, 推荐
参见 IBM developerWorks 的文章:Linux 技巧:让进程在后台可靠运行的几种方法
screen
tmux
VNC
...
我觉得用crontab也可以实现,比如:
0 12 30 8 * cd [脚本目录];./listen.sh &
不过,这里可能有个问题,就是到明年8月30号又会启动一次
node里应该还有一个叫做forever的npm
A simple CLI tool for ensuring that a given script runs continuously (i.e. forever
https://github.com/nodejitsu/forever
上面的各位,nohup还有东西没有写完整哦
nohup command > myout.file 2>&1 &
screen是最简单的
常用办法 都被大家说了, 应该还有一种方法是忽略 SIGTERM 信号。
用perp
tmux 和screen——Linux从业者必备利器