为什么我的脚本通过 cli 运行可以运行,但通过 crontab 运行却不行?

为什么我的脚本通过 cli 运行可以运行,但通过 crontab 运行却不行?

在 WSL Ubuntu 20.04 上,我有两个脚本(一个 sh 和一个 python),如果我使用 bash 启动它们,它们可以完美运行,但使用 cron 则不行。

只有第一个脚本 (bash) 成功后,第二个脚本 (python) 才会运行。因此我使用了一个&&运算符。

如果我运行/mnt/c/folder/first.sh && /home/myself/miniconda3/bin/python /mnt/c/folder/second.py,但是如果我在 crontab 中有同样的这行,第二个脚本不起作用

我尝试将该行包含/home/myself/miniconda3/bin/python /mnt/c/folder/second.py到 bash 脚本中,但同样不起作用。
这个 python 脚本利用环境变量来工作,我想知道这是否是原因。虽然我尝试. $HOME/.profile;在上述命令之前将其包含在 crontab 中;但没有成功。

答案1

这个python脚本利用环境变量来工作,我想知道这是否是原因。

是的,当通过/bin/sh命令执行时(anacron默认情况下执行),该 shell 不是登录 shell,因此~/.profile无法获取来源。

尽管我曾尝试在上述命令之前的 crontab 中包含 .$HOME/.profile;,但没有成功。

这对我有用。我将其添加export abc=123到我的~/.profile并将以下内容添加到/etc/crontab

*  *    * * *   username    . $HOME/.profile && true && echo $abc >> $HOME/crontest

结果~/crontest正确显示了123每分钟过去的情况。

另一种方法是强制sh作为登录 shell 运行(-l),并通过以下方式传入脚本-c

*  *    * * *   username    sh -lc 'true && echo $abc >> $HOME/crontest'

相关内容