我有一个简单的python脚本test.py
,它打印日期和时间然后引发错误。
我在.bash_profile
中定义了一个名为test()
的bash函数,该函数使用
$ 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脚本的输出定向到日志文件?
答案 0 :(得分:2)
首先,test
是函数的错误名称,因为几乎所有shell都内置了test
,并且几乎所有系统都有外部test
命令。
现在,当您在cron
中运行时,与登录和/或交互式shell会话的启动不同,不会读取会话启动脚本,因此~/.bash_profile
中定义的函数(source
- d开始登录会话时)无法使用。
请注意,许多系统不使用bash
来运行cron
脚本,例如Ubuntu使用dash
。无论如何,你在test
中执行的cron
大概是shell的内置test
命令,它将返回退出代码1而没有任何参数。
答案 1 :(得分:0)
为什么不直接在crontab,
中添加以下内容并删除 test()
bash函数中间人?
* * * * 1 /usr/bin/python3 /home/myname/test.py >> ~/$(date +\%Y-\%m-\%d_\%H:\%M:\%S).log 2>&1