我的 cron 命令不起作用

我的 cron 命令不起作用

运行的命令source不起作用。

crontab -e


*/1 * * * * echo "1" > $HOME/cron && source $HOME/.zshrc && echo "2" >> $HOME/cron2 && source /home/alux/gitHub/rememberMe/.venv/bin/activate && echo "3" >> $HOME/cron && python /home/alux/gitHub/rememberMe/rememberMe/manage.py runcrons > /home/alux/gitHub/rememberMe/rememberMe/cronjobs.log && echo "4" >> $HOME/cron

cron文件的内容是1

答案1

source是一个bash-ism (或者zsh-ism 就此而言),而默认cron使用sh( dash) 作为选择的 shell。

因此您需要使用.而不是source来保持 POSIX:

. "$HOME"/.zshrc

或者你可以使用以下SHELL变量将 shell 更改为你想要的任何 shell crontab

SHELL=/usr/bin/zsh

crontab您需要将其放在任何命令输入之前的顶部附近。

按照你的例子:

SHELL=/usr/bin/zsh

*/1 * * * * echo "1" > $HOME/cron && source $HOME/.zshrc && echo "2" >> $HOME/cron2 && source /home/alux/gitHub/rememberMe/.venv/bin/activate && echo "3" >> $HOME/cron && python /home/alux/gitHub/rememberMe/rememberMe/manage.py runcrons > /home/alux/gitHub/rememberMe/rememberMe/cronjobs.log && echo "4" >> $HOME/cron

现在您可以继续使用原来的source方法。

对于您的情况,这是推荐的方法,因为您正在source-ing .zshrc,大概您zsh在那里有特定的声明,但在中不起作用sh

如果您不想设置SHELL变量,您可以将整个命令作为参数运行zsh -c,但这需要小心引用。

更安全的方法是将命令放入脚本中,然后使用#!/usr/bin/env zshshebang 将其作为可执行文件运行或作为参数运行zsh(不使其可执行)。


附注:请始终引用变量扩展,除非您有意对其进行单词拆分和路径名扩展。

相关内容