Python后台运行-nohup-python-xxx.py-
目录
Python后台运行 – nohup python xxx.py &
nohup 用法总结
代码示例
运行python程序 –
my.py
脚本
nohup python my.py >> my.log 2>&1 &
# 或者
nohup python my.py >> nohup.out 2>&1 &
# 或者
nohup python my.py & # 这种写法和上面第二种写法等价
shell脚本类似 –
tomcat.sh
并指定存放文件目录
nohup tomcat.sh > /dev/null 2>&1 &
nohup指令
- nohup指不断地运行,是no hang up的缩写,指不间断,不挂断。运行一个进程的时候,不想让其在你退出账号时关闭,即可用nohup。
- nohup在不规定的情况下,所以输出内容会到nohup.out中
2>&1 错误内容重定向到标准输出
0
表示stdin标准输入,用户键盘输入的内容1
表示stdout标准输出,输出到显示屏的内容2
表示stderr标准错误,报错内容2>&1
是一个整体,>
左右不能有空格,即将错误内容重定向输入到标准输出中去。
& 后台运行
&
为后台运行第一条代码,以python环境不间断的运行
my.py
这个脚本,并且将脚本输出的内容重定向输入my.log中(>>
意为追加,如果用>
会让其中的内容清空)nohup python my.py >> my.log 2>&1 &
和nohup python my.py 1 >> my.log 2>&1 &
相同,只是1
(标准输入)被省略了,而后面的my.log 2>&1
又将2
(错误内容)输入到标准输出,然后前面的标准输出又输入到my.log
中,意思错误和标准内容都会输出到my.log
中,其实代码可拆成两块。即:
nohup python my.py >> my.log 2>&1 &
# 等价于下面两行的内容
nohup python my.py 1>> my.log &
nohup python my.py 2>> my.log &
上面代码就是将错误和标准都输出到my.log,最初的代码只是简化了。
而加
2>&1
中的&
是为了区别文件1和1
(标准输出),假如为2>1
,那么不就成了将错误内容输出到文件1中。nohup tomcat.sh > /dev/null 2>&1 &
也是一样的,将错误和标准全部丢入/dev/null
中,全部销毁。
若不指定输出文件名,默认会在当前目录生成nphup.out文件
可能存在的问题
生成了
nohup.out
文件,但是内容始终是空的。
原因
python的输出又缓冲,导致
nohup.out
并不能够马上看到输出。
-u
参数,使得python不启用缓冲。
nohup python -u my.py >> nohup.out 2>&1 &