使用 nohup 使脚本无限期地运行

Jav*_*bra 6 ssh cron rhel php nohup

我很新Linux,我只使用它SSH到我的网络服务器使用Putty. 我遇到的问题是:

基本上我有2个php脚本。一个人get_tweets.php不断地在 twitterStreaming API上收听推文,而另一个人 -parse_tweets.php将这些记录到db. 为了使这些工作正常,它们必须保持连续运行。

我一直在使用以下命令在后台运行它们,并且从我所看到的它们在一天中的大部分时间都在运行,但是每当我早上登录到我的计算机时,它就scripts停止了,我必须运行命令再次。

nohup php my_script.php > /dev/null &

我只是想知道根据我使用的命令这是否正常,它们是否应该在使用时无限期运行nohup,如果不是,还有什么替代方法?一份CRON工作?

谢谢您的帮助

loo*_*ser 8

随着nohup你必须重定向也错误。下一个命令运行脚本,输出和错误重定向到 /dev/null:

nohup php my_script.php >/dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

但是您的脚本可能因其他一些原因(脚本错误、oom-killer 等)而终止。所以,你应该通过系统的 init 来守护它(如果它支持自动重启——upstart、systemd 和其他一些可以做到)。或者你应该编写 cron 任务来检查并重新启动你的脚本,如果它没有运行。


Seb*_*ian 4

也许您想看看发生了什么,而不是将输出重定向到/dev/null.

我建议你打开一个screentmux会话。两者都是终端多路复用器,即使您注销,它们也会保持活动状态。

例如,(..)获取信息

$ screen
$(inside screen-t1): ./get_tweets.php
.... running first
Run Code Online (Sandbox Code Playgroud)

现在按Ctrl-a c打开一个新终端。

 $(inside screen-t2): ./parse_tweets.php
 ... running second
Run Code Online (Sandbox Code Playgroud)

Ctrl-a d让您分离会话。当您重新登录时,使用screen -r

注意:您可以在屏幕中显示状态栏以可视化不同的窗口。