运行的命令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
Run Code Online (Sandbox Code Playgroud)
cron 文件的内容是1.
source是bash-ism(或zsh-ism),而默认情况下cron使用sh( dash) 作为选择的外壳。
所以你需要使用.而不是source保持POSIX:
. "$HOME"/.zshrc
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用以下SHELL变量将 shell 更改为您想要的任何 shell crontab:
SHELL=/usr/bin/zsh
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
现在你可以坚持你原来的source方法了。
这是针对您的情况的推荐方法 - sourceing .zshrc,大概您zsh在那里有特定的声明,但在sh.
如果您不想设置SHELL变量,您可以将整个命令作为 的参数运行zsh -c,但这会导致小心引用。
更安全的方法是将命令放在脚本中,然后将其作为带有#!/usr/bin/env zshshebang的可执行文件或作为参数运行zsh(不使其可执行)。
作为旁注,除非您有意要对它们进行分词和路径名扩展,否则请始终引用您的变量扩展。