我正在使用AWS(ubuntu实例),希望使用nohup在后台运行。
我在putty中尝试了这段代码。
sudo nohup python3 manage.py runserver --settings=health.settings 0.0.0.0:80
然后,
nohup: ignoring input and appending output to 'nohup.out'
这段代码能够正常运行网站。 但是当我按下'Ctrl + C'时,nohup就停止了。 出了什么问题?
我正在使用AWS(ubuntu实例),希望使用nohup在后台运行。
我在putty中尝试了这段代码。
sudo nohup python3 manage.py runserver --settings=health.settings 0.0.0.0:80
nohup: ignoring input and appending output to 'nohup.out'
这段代码能够正常运行网站。 但是当我按下'Ctrl + C'时,nohup就停止了。 出了什么问题?
nohup
命令可以防止进程收到HUP信号(即当控制终端退出时发送的挂起信号),从而使进程不会被中断。但它并不忽略SIGINT信号,即ctrl+c发送的信号。
使用&
作为后续命令分隔符,在后台启动您的进程:
sudo nohup python3 manage.py runserver --settings=health.settings 0.0.0.0:80 &
或者您可以自行重定向标准输入/输出/错误,并使用bash内置命令disown
,它与nohup
一样有效地防止HUP信号的传播:
sudo python3 manage.py runserver ... </dev/null >runserver.log 2>&1 &
disown -h
...或者更好的方法是使用一个真正的进程监控系统(Upstart,DJB daemontools,runit,launchd,systemd,或其他许多系统。最佳实践是使用您的操作系统供应商所提供的那个系统,除非有强烈的反对理由)在后台运行和重启进程。
sudo
来为它授予根权限的另一种方式将应用程序服务器公开在端口80上(例如将其放置在端口8080上并告诉 iptables 将入站请求映射到本地端口8080),那么除非您遇到性能问题或您需要正常的 Web 服务器免费提供给您的功能,否则这并不具有说服力。 - Charles Duffy