我有一个cron作业,每8小时启动一个shell脚本,然后调用一堆程序。有时这些程序不会优雅地终止,而且会陷入困境。
所以如果我的cron脚本(run_foo_bar.sh
)看起来像这样:
python foo.py
python bar.py
...我可以同时运行多个foo和bar。现在我通过执行ps -ax |grep foo
来获取PID,然后使用ps -p $PID -o etime=
找到运行时但这很麻烦。
python程序将一堆调试语句打印到控制台,shell脚本本身通过管道传输到日志文件。我想找到一种方法,一旦调用它的调用时间就会回显每个进程的PID,所以我的run_foo_bar.sh看起来像这样:
date
python foo.py
<some magic to find PID>
echo foo.py is running as PID $PID
date
python bar.py
<some magic to find PID>
echo bar.py is running as PID $PID
答案 0 :(得分:1)
为了完整起见,在Python方面,你可以这样做:
import os, sys
print(os.getpid())
sys.stdout.flush()
转储当前的PID。您可能希望将其打印到文件而不是终端,以便您可以从该文件中提取它。
在shell中,由于您只是在等待运行cron作业,因此另一个选项(从this answer修改):
python foo.py & echo "$!" > "some file somewhere that will hold the PID" ; fg
在后台运行python foo.py
,保存python
进程的pid($!
每this个}),然后返回python
到前台所以它可以正常运行。