我们需要将 /usr/local/bin 添加到所有用户的 cron 路径中。有没有办法在整个系统范围内进行设置,而无需编辑每个用户的 crontab?
我们已尝试将 PATH 添加到 /etc/crontab:
# grep PATH /etc/crontab
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
但是当用户的 crontab 中有这个时:
$ crontab -l | grep PATH
* * * * * echo $PATH > /tmp/current_cron_path
...它表明他们的路径仍然设置为默认路径:
$ cat /tmp/current_cron_path
/usr/bin:/bin
答案1
您可以在 crontab 配置文件中配置您的 PATH如第一个代码所示,除了。首先指定环境变量,然后指定作业。
更新:由于链接已损坏,以下是摘录:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
答案2
在 Ubuntu 中设置 PATH 变量应该可以起作用,怎么说它不起作用呢?
答案3
我也找不到解决办法。我找到的最接近的解决办法是以下内容(摘自https://raymii.org/s/tutorials/Better_cron_env_and_shell_control_with_the_SHELL_variale.html)。
- 更改 cron 作业的 shell 并将其指向 bash 脚本。即在 cron 作业的顶部添加:
SHELL=/path/to/setup/cron.bash
- 在此 shell 脚本中,加载环境变量并指定其他变量。确保在顶部包含以下 4 行。它将 SHELL 变量重置为 bash,并执行 bash shell 来运行 cronjobs。
例如:
#!/bin/bash
set -e
source /etc/environment
source /etc/profile
# restore SHELL env var for cron
SHELL=/bin/bash
# execute the cron command in an actual shell
exec /bin/bash --norc "$@"
缺点:这要求您在每个 cronjob 的顶部指定SHELL=...
。优点:您将使用常规环境变量,并且不必担心在 cron 和其他 cron 之间保持变量的一致性
答案4
如果您可以成为 root,您可以尝试/etc/init.d/cron
在那里编辑和更改 PATH 吗?我还没有测试过,但检查一下会很有趣。