前言
写了一个python任务脚本,需要一直运行,刚开始使用了宝塔应用管理器和python管理器,都会出现运行着就停止运行的情况,而且上面还是显示在运行着....于是打算直接使用nohup运行
方法
先进入脚本文件的根目录
cd /www/Python/Auto/qianchuan/jiankong
使用nohup运行
nohup python -u main.py > message.log 2>&1 &
解释
nohup 和 & 的区别
- &
是指在后台运行,但当用户退出(挂起)的时候,命令自动也跟着退出 - nohup
运行 nohup --help
Run COMMAND, ignoring hangup signals. 可以看到是“运行命令,忽略挂起信号”就是不挂断的运行,注意没有后台运行功能。
那么,我们可以巧妙的吧他们结合起来用就是
nohup COMMAND &
这样就能使命令永久的在后台执行
-u
python的输出进行了缓冲,导致message.log并不能够马上看到输出。
为python添加-u 参数,使得python不启用缓冲。
message.log
如果不填写的话,系统默认是写入到运行文件同位置output.out文件内,填写的话则会重定向到指定的文件
2>&1
- 0 表示stdin标准输入,用户键盘输入的内容
- 1 表示stdout标准输出,输出到显示屏的内容
2 表示stderr标准错误,报错内容
2>&1是一个整体,>左右不能有空格,即将错误内容重定向输入到标准输出中去。
2>&1中的&是为了区别文件1和1(标准输出),假如为2>1,就成了将错误内容输出到文件1中,而不是标准输出中。
其他
挂起后台进程以后想查看是否运行或者关闭该怎么办呢?别急,我们继续。
查看进程
ps aux | grep main.py
main.py 是运行的文件
可以看到PID是12526
关闭进程
kill -9 12526
实时追踪文件输出到屏幕
tailf message.log