一点PHP博客分享关于如何让linux中的shell指令能在后台运行,我们在开发一个项目的时候,常常会需要后台去不停的跑一些程序代码用来支持我们的服务应用。但是在执行的时候会占用前台终端,导致我们不能做其他的操作,这时候就需要用到后台去开启一个守护进程的方式,本文以python中的爬虫例子举例。
首先先介绍一下linux中nohup指令:
nohup
它的作用如其字面意思,使进程不受 SIGHUP
信号的影响。但我们在使用 nohup php test.php
后会发现,进程还会一直占用前台终端,但即使终端被关闭或连接断开了,程序还是会执行,另外我们会发现在当前文件夹下多了个名为 nohup.out
的文件。
这是因为 nohup 的功能仅仅是让进程不受 SIGHUP
信号的影响,并不会让出前台终端,而且它还会在命令执行目录下建立 nohup.out
用以存储进程的输出。如果进程不需要输出,且不想让 nohup 创建文件,可以将标准输出和标准错误输出重定向。
我们常将 nohup
和 &
搭配到一块使用,执行命令如下 nohup command >/dev/null 2>&1 &
这样,就可以放心的等待进程运行结果了。
案例介绍:
假设我们做的是一个实时性的爬虫数据采集更新,那么程序是每一秒都在运行,所以这时候就要使用后台守护进程的方式去执行,具体命令如下:
1 |
nohup python collection.py >>/logs/log_collectionjob.txt 2>&1 & |
一点PHP,每天一点技术分享。