这两天要在服务器端一直运行一个Python脚本,固然就想到了在命令后面加&符号
python
$ python /data/python/server.py >python.log &
说明:
一、 > 表示把标准输出(STDOUT)重定向到 那个文件,这里重定向到了python.log
二、 & 表示在后台执行脚本
这样能够到达目的,可是,咱们退出shell窗口的时候,必须用exit命令来退出,不然,退出以后,该进程也会随着shell的消失而消失(退出、关闭)
使用nohup(not hang up):
shell
$ nohup python /data/python/server.py > python.log3 2>&1 &
说明:
一、1是标准输出(STDOUT)的文件描述符,2是标准错误(STDERR)的文件描述符
1> python.log 简化为 > python.log,表示把标准输出重定向到python.log这个文件
二、2>&1 表示把标准错误重定向到标准输出,这里&1表示标准输出
为何须要将标准错误重定向到标准输出的缘由,是由于标准错误没有缓冲区,而STDOUT有。
这就会致使 commond > python.log 2> python.log 文件python.log被两次打开,而STDOUT和 STDERR将会竞争覆盖,这确定不是我门想要的
三、好了,咱们如今能够直接关闭shell窗口(我用的是SecureCRT,用的比较多的还有Xshell),而不用再输入exit这个命令来退出shell了
$ ps aux|grep python
tomener 1885 0.1 0.4 13120 4528 pts/0 S 15:48 0:00 python /data/python/server.py
tomener 1887 0.0 0.0 5980 752 pts/0 S+ 15:48 0:00 grep python
如今当咱们直接关闭shell窗口,再链接上服务器,查看Python的进程,发现进程还在服务器
可是,在python运行中却查看不到输出!server
由于:blog
python的输出有缓冲,致使python.log3并不可以立刻看到输出。进程
使用-u参数,使得python不启用缓冲。it
因此改正命令,就能够正常使用了class
$ nohup python -u test.py > out.log 2>&1 &