运行的命令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
方法了。
这是针对您的情况的推荐方法 - source
ing .zshrc
,大概您zsh
在那里有特定的声明,但在sh
.
如果您不想设置SHELL
变量,您可以将整个命令作为 的参数运行zsh -c
,但这会导致小心引用。
更安全的方法是将命令放在脚本中,然后将其作为带有#!/usr/bin/env zsh
shebang的可执行文件或作为参数运行zsh
(不使其可执行)。
作为旁注,除非您有意要对它们进行分词和路径名扩展,否则请始终引用您的变量扩展。