后台不挂断执行脚本并重定向输出到指定文件

首先,我们需要了解几个概念:

后台运行

顾名思义,不再受前台输入影响。

例子,我在某个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掉这个进程

 

posted @ 2020-05-01 18:17  jiage666  阅读(684)  评论(0编辑  收藏  举报