如何永久地全局设置 cron PATH(即为所有用户)?

如何永久地全局设置 cron PATH(即为所有用户)?

我们需要将 /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 变量应该可以起作用,怎么说它不起作用呢?

参考#14:Linux Crontab:15 个很棒的 Cron Job 示例

答案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 吗?我还没有测试过,但检查一下会很有趣。

相关内容