2019独角兽企业重金招聘Python工程师标准>>>
问题表现:
每次手动执行这个python脚本运行,程序工作的很好,但是如果是通过crontab的方式来运行,就会有各种问题!
处理:
*/15 * * * * sh /root/app/crypt/start.sh >> /root/app/crypt/res.log 2>&1
发现了原来脚本中使用的路径用了相对的路径,修改为绝对路径后就正常跑crontab了。需要添加2>&1才能看到这段错误信息。
command >> file 2>&1 是什么?
这也是今天在尝试让crontab打印出错误信息才学到的东西。
先说说下面的命令的意思:
command >> file 2>>file
这是说:正常的输出信息会添加到file之中,错误信息也会添加到file之中,但是是两个文件管道FD1跟FD2同时在抢,并且可能产生互相覆盖的现象
command >> file 2>&1
就不太一样了:首先正常的输出(到屏幕)信息会通过管道FD1会添加到file之中,错误信息会继承FD1也添加到file 之中。
当crontab命令加上这个后缀(2>&1) 之后,我的debug.log 之中终于出现如下图所示的错误信息(sh: l: java not found),也终于找到了解决问题的方向。
其他问题的解决方案:
解决方案 – 1 :增强型crontab
在crontab的命令里面增加source /path/to/configfile. 比如我们的java是配置到/etc/profile之中,那么我的crontab命令就是:
* * * * source /etc/profile; cd XXXX && pythontask.py >> ~/debug.log 2>&1
但是发现这种方式在我的环境并没起作用
解决方案 – 2 : bash脚本出马
这种方式需要在增加一个bash脚本来调用python命令。参考下面:
#!/bin/bash source /etc/profile pythontask.py