【发布时间】:2021-03-11 02:10:18
【问题描述】:
我正在使用以下命令从本地机器重新启动服务器:
ssh -l root -p 22 $SERVER_HOST "cd $SERVER_DIR && nohup bin/restart &"
而且它不工作,并且什么也没打印,所以我不知道是什么问题。但是,如果我删除 nohup 和 & - 它正在工作。为什么以及如何使其工作(并在终止 ssh 后继续在后台运行)?
没有 nohup 的版本可以工作,但会阻止 shell(它也打印来自 bin/restart 脚本的输出,这与带有 nohup 的版本不同)。但我不能使用它,因为我需要服务器继续在后台工作。
ssh -l root -p $SERVER_PORT $SERVER_HOST "cd $SERVER_DIR && bin/restart"
如果有问题,bin/restart 脚本的内容(重新启动 Ruby on Rails 应用程序)
. /root/.asdf/asdf.sh
killall -r ruby
RAILS_ENV=production bundle exec rails server
【问题讨论】:
-
不要以这种方式启动或重新启动服务。您的操作系统使用 systemd 吗?然后将它们设置为 systemd 服务,
systemctl restart your-service将重新启动它(如果您希望命令在进程成功重新启动之前返回,请使用--no-block选项)。如果你的目标操作系统是 MacOS,那么它的进程管理器 launchd 由 launchctl 控制。 -
所以如果你使用
exec </dev/null >some.log 2>&1; myprogram & disown -h $!,恭喜你,你只是手动完成了nohup myprogram &所做的一切。 -
回到这里的问题:首先要阅读你的
nohup.out和edit的内容。 -
你为什么不能
ssh -l root -p $SERVER_PORT $SERVER_HOST "cd $SERVER_DIR && bin/restart" &? -
将
bin/restart替换为sleep 120并检查结果。