直接从cron (calls) bash (calls) python3输出



我有一个简单的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

最新更新