我有一个简单的python脚本test.py
,它打印日期和时间,然后引发一个错误。
.bash_profile
中定义了一个bash函数,命名为test()
,它使用
调用脚本。$ python3 ~/test.py
最后,我设置了一个cron行,每分钟调用一次test()
bash函数,以便使用
进行测试。test >> ~/$(date +%Y-%m-%d_%H:%M:%S).log 2>&1
当我运行python脚本或bash函数时,我正确地将打印结果和错误都输出到终端。当cron调用python脚本目录时,它会正确记录日志。但是当cron调用bash函数时,不会向日志文件中写入任何内容。
当cron调用bash函数时,我如何正确地将python脚本的输出定向到日志文件?
首先,test
是一个不好的函数名,因为几乎所有的shell都有内置的test
,而且几乎所有的系统都有外部的test
命令。
现在,当你在cron
中运行一些东西时,不像开始登录和/或交互式shell会话,没有会话启动脚本被读取,因此~/.bash_profile
中定义的函数(source
-d在开始登录会话时)是不可用的。
注意,许多系统不使用bash
来运行cron
脚本,例如Ubuntu使用dash
。无论如何,你在cron
中执行的test
大概是shell的内置test
命令,它将返回退出代码1而不带任何参数。
为什么不直接将以下行放在crontab,
中并消除 test()
bash函数中间人呢?
* * * * 1 /usr/bin/python3 /home/myname/test.py >> ~/$(date +%Y-%m-%d_%H:%M:%S).log 2>&1