从cron(调用)bash(调用)python3定向输出

从cron(调用)bash(调用)python3定向输出,python,bash,cron,Python,Bash,Cron,我有一个简单的python脚本,test.py,它打印日期和时间,然后引发一个错误 我在.bash\u profile中定义了一个bash函数,名为test(),它使用 $ python3 ~/test.py 最后,我设置了一个cron行,每分钟调用一次test()bash函数,以便使用 test >> ~/$(date +\%Y-\%m-\%d_\%H:\%M:\%S).log 2>&1 当我运行python脚本或bash函数时,我正确地将打印和错误信息发送到终端

我有一个简单的python脚本,
test.py
,它打印日期和时间,然后引发一个错误

我在
.bash\u 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,而不带任何参数。

首先
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

为什么不直接在
crontab,
中插入以下行,并删除
test()
bash函数中间人

* * * * 1    /usr/bin/python3 /home/myname/test.py >> ~/$(date +\%Y-\%m-\%d_\%H:\%M:\%S).log 2>&1

请在.bashrc和cron文件中提供测试函数的相关详细信息。正如在post中一样,实际的cron文件内容调用了您以正确格式编写的python脚本。请您提供.bashrc中的测试函数和cron文件的相关详细信息。正如在post中一样,实际的cron文件内容调用您以正确格式编写的python脚本