后台不挂断执行脚本并重定向输出到指定文件
首先,我们需要了解几个概念:
后台运行:
顾名思义,不再受前台输入影响。
例子,我在某个shell进程以后台运行的方式运行了某个脚本后,当我用ctrl+c想结束这个脚本时,会发现,结束不了!
不挂断:
某个正在运行的进程不会因为其父进程的退出而终止。
例子,我在某个shell进程以不挂断的方式运行了某个脚本,当我退出这个shell后,这个脚本不会因此而终结。
标准输入:
默认指向键盘
标准输出:
默认指向屏幕,
比如pytho中的print;php中的echo、var_dump
标准错误:
默认指向屏幕,
比如各种语言的错误提示、警告等,都会调用系统的标准错误函数
重定向:
改变上面几个的流向,
比如我想让我的python脚本中的print打印保存到一个指定的文件,而不是直接显示在屏幕上
现在我们想在后台不挂断的运行一个python脚本,
并让这个脚本里面的print都保存到指定文件,
如果程序有报错,报错也要保存到同样的文件中,
可以这样写:
nohup /usr/bin/python -u test.py 1 >> ~/data/test.log 2>&1 &
我们挨个解释
nohup: 不挂断
/usr/bin/python: 指定python 解释器路径
-u: 标准输出不缓存,直接输出,只针对python语言
test.py: 目标脚本
1 >> ~/data/test.log :将前面脚本产生的标准输出重定向到指定文件,并以追加的方式写文件
2>&1:将前面脚本产生的标准错误重定向到标准输出所指定的文件中,写文件的方式与标准输出一致
&:后台运行
如何结束进程?
当我们以不挂断的方式运行时,虽然不会因为父进程的退出而终止,但是我们依然可以在父进程中使用ctrl+c结束他,
而当我们以后台运行的方式时,无法用ctrl+c结束进程,
这时候,我们需要找到进程id,并手动kill掉这个进程