用shell + crontab写了个监控程序,详情见上一篇博文 “时时监控程序运行的方法”
其中shell脚本运行程序的命令:
python main_dynamic.py
虽然能监控到程序有没有运行,但执行出了问题。因为用ps -aux|grep main_dy,没有找到运行的脚本。
始终不明白为什么这里一直失败。因为我直接手动执行相应的脚本。 sh .run.sh,是可以成功的。
想到路径可能会导致这个问题。
所以将命令改动了,如下:
python /home/xxxx/yyyyy/main_dynamic.py
用ps查找,其结果仍然是失败。
但在查找的过程中,系统有提示新邮件: /var/log/message
然后进去看了看,提示找不到pathlib包。进行推断python解释器用python2的,因为python3是支持的。
所以将命令改写了。
/root/anaconda3/xxxx/yyyy/python /home/xxxx/yyyyy/main_dynamic.py
测试就OK了。
为什么没有快速怀疑到这点呢?
因为在Linux系统中,默认的是python3,在任何路径下直接输入python,显示都是python3。python2.exe目录除外。
结论:crontab 执行用到了python2;
提问:
crontab执行时为什么会用到python2呢?