shell进程管理
shell进程管理判断进程是否还在work,如果进程被kill掉进行重启python_path=/da1/hdp-svideo-algo/wangxiaoyang/miniconda3/bin/pythonsrc_base_dir=/da1/hdp-svideo-algo/wangxiaoyang/zm/recall/srcmod_name=action_dislike_userid.pyNUM=
shell进程管理
判断进程是否还在work,如果进程被kill掉进行重启
python_path=/da1/hdp-svideo-algo/wangxiaoyang/miniconda3/bin/python
src_base_dir=/da1/hdp-svideo-algo/wangxiaoyang/zm/recall/src
mod_name=action_dislike_userid.py
NUM=`ps aux | grep ${mod_name} | grep -v grep |wc -l`
curr_time=$(date)
echo ${curr_time}, "process cnt of ${mod_name} is ",${NUM}
if [ "${NUM}" -lt "1" ];then
echo "${mod_name} was killed"
cd ${src_base_dir}
nohup ${python_path} ${src_base_dir}/${mod_name} &
fi
tips
ps aux | grep zm_cold
返回结果为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A6tbz9GQ-1641817679260)(/var/folders/s5/l83d0_8x4pz6q1gwvs28_jsr0000gn/T/abnerworks.Typora/image-20220110193935208.png)]
下面第二行返回的原因是grep本身就是一个进程,如果只看进程名对应的进程信息,我们需要进行过滤
ps aux | grep zm_cold | grep -v grep
nohup命令
nohup Command [ Arg … ] [ & ]
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
nohup command &
nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
如何查看nohup命令?
jobs -l
jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
ps -aux | grep zm_cold
a:显示所有程序
u:以用户为主的格式来显示
x:显示所有程序,不以终端机来区分
再用awk提取一下进程ID
ps -aux | grep zm_cold | grep -v grep | awk '{print $2}'
nohup重定向
操作系统中有三个常用的流:
0:标准输入流 stdin
1:标准输出流 stdout
2:标准错误流 stderr
2>&1的意思
这个意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件output里面,所以结果是标准错误和标准输出都导入文件output里面了。 至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。这就会导致 >output 2>output
文件output被两次打开,而stdout和stderr将会竞争覆盖,这肯定不是我门想要的. 这就是为什么有人会写成: nohup ./command.sh >output 2>output
出错的原因了 。
//只输出错误信息到日志文件
nohup ./program >/dev/null 2>log &
//什么信息也不要
nohup ./program >/dev/null 2>&1 &
关于/dev/null文件
Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。
更多推荐
所有评论(0)