本地长时期运行爬虫程序后,被检测反爬的几率大大增高。所以想到将爬虫部署到服务器,定期自动运行。但是,远程连接Linux服务器跑程序,如果本地电脑关机,linux服务器程序也会断掉,这是因为断开连接后,终端会收到SIGHUP(hang-up 挂断)信号从而关闭该会话期的子进程。
有几种方法可以解决这个问题:
1. 使用nohup命令,在命令前加上nohup,并在命令后加上&符号,使程序在后台运行,并忽略SIGHUP信号1。例如:nohup ping 127.0.0.1 &。nohup会将程序的输出重定向到当前目录或$HOME目录下的nohup.out文件中。
2. 使用screen命令,创建一个虚拟终端,并在其中运行程序2。例如:screen -S name创建一个名为name的虚拟终端,然后在其中运行程序。如果要退出虚拟终端,可以按下Ctrl+A+D组合键。如果要重新进入虚拟终端,可以使用screen -r name命令。
3. 使用Ctrl+Z组合键将程序暂停,并使用bg命令将其放入后台运行。例如:运行了python tt.py这个程序,按下Ctrl+Z暂停它,然后输入bg %1将其放入后台运行。
这样,在linux服务器后端运行程序,不会因为前段电脑关机而停止程序的运行。在这里演示第一种方法:
首先,进入程序所在路径,运行指令:
nohup python3 get_pic.py > hehe.log&
但是,这样会报错:
nohup: ignoring input and redirecting stderr to stdout
意思是控制台输出的信息输出到两处,根据大佬的代码,修改指令:
nohup python3 -u get_pic.py > hehe.log 2>&1 &
为python添加-u 参数,使得python不启用缓冲(不然日志更新会很慢)。运行成功!效果如下:
1634是进程号,忘记了也没关系,可以通过 ps 指令查看所有进程。要想结束这个进程,可以输入指令:
kill -9 PID
要想查看程序的运行情况,有两张方式,第一种是:
vim hehe.log
这样的话就可以看到log中的内容,但是没有办法动态的显示程序的动态的运行情况。
第二种是:
tail -f hehe.log
这样的话就可以动态的显示程序的运行情况,采用CTRIL + C的方式停止查看。查看结果是:
参考链接:
https://blog.csdn.net/qq_40721108/article/details/129411611
https://blog.csdn.net/weixin_43878062/article/details/120383226