cron 从 crontabs 运行 shell 命令。
但是,刚刚被 zsh 和 bash 之间的差异所困扰,我现在担心的是,我不知道 cron 使用哪个 shell 来解释 crontab 命令?显然,cron 条目仅指向脚本文件的简单情况由#!/path/to/interpreter
第一行处理,但是当 cron 中有更复杂的东西时该怎么办?
我查看了一下/etc/cron*
,没有发现任何可以设置或更改此功能的东西?
答案1
您可以输入SHELL=/bin/bash
您的crontab
- 也可以指向.bashrc
使用BASH_ENV="/root/.bashrc"
。这应该可以让您开始。我实际上不知道如果您没有SHELL
定义会发生什么,但将其添加到crontab
可以很容易地分辨出什么是什么。
答案2
这crontab(5)manpage 默认处理你的查询/bin/sh
cron(8) 守护进程会自动设置几个环境变量。SHELL 设置为 /bin/sh,LOGNAME 和 HOME 则从 crontab 所有者的 /etc/passwd 行中设置。HOME 和 SHELL 可能会被 crontab 中的设置覆盖;LOGNAME 则不会。
所以添加
SHELL=/bin/bash
添加到 crontab 文件将会相应地改变 shell。