我试图让我的 ubuntu 服务器上的应用程序保持运行,以便 Google 有时间 ping 它,但是当我注销时,该应用程序就会一直关闭。
我启动 Nodejs 应用程序来supervisor
监控变化(通过 shell 脚本)
我找到了类似的命令nohup
,但是除了输入类似的简单命令之外,我对运行后台服务一无所知,service httpd start
这些命令似乎对 CentOS 上的 Apache 运行得很好!
我需要创建另一个用户来运行服务吗?我有一个装有 Ubuntu 10.04 的 Linode 实例
运行
cd myapp/src/main/node
supervisor -w "myapp/src/main/node,myapp2/src/main/node,./" run-apps.js
答案1
尝试这个:
nohup supervisor -w "myapp/src/main/node,myapp2/src/main/node,./" run-apps.js &
其他一些方法:
答案2
它退出的原因是,当您注销并终止父 shell 时,脚本会收到 HUP 信号并失去写入 STDOUT 和 STDERR 的能力。
您有 4 个选项(按“正确性”和“清洁度”排序):
- 对其进行修改,以便它忽略 HUP 信号并干净地记录到文件中。
screen
在会话中运行脚本- 使用运行脚本
nohup
- 创建一个相当复杂的 bash 脚本,启动该脚本然后
disown
关闭相关的 STDOUT 和 STDERR 通道。
答案3
这是另一种不用nohup
“放弃”的方法。
例如:
$ jobs
$ sleep 300 &
[1] 79844
$ jobs
[1] + running sleep 300
$ disown %1
$ jobs
$ pgrep sleep
79844
解释:
- 用于
jobs
显示后台作业,没有 - 背景
sleep 300
- 再次使用
jobs
。PID 为sleep
79844,作业编号为 1 - 放弃工作#1
- 再次使用
jobs
。无后台作业。 - 用于
pgrep
查找名为 的任何进程sleep
。有一个进程,PID 为 79844(相同的 PID)
您可以关闭终端和/或注销,而不会影响已放弃的工作。
这样做的好处是不会留下nohup.out
文件,但也会丢失写入的任何内容STDOUT
。