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


10

对于所有用户,我们需要在cron的路径中包含/ usr / local / bin。有没有一种方法可以在全系统范围内进行设置,而无需编辑每个用户的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

2
一般提示:写“没用”通常不会给您有用的答复。总是描述它到底是怎么工作的,也就是你做了什么,以及结果到底是什么。
sleske

Answers:


4

您可以在crontab配置文件中配置PATH,如第一个代码所示,除非在那里。首先指定env变量,然后指定作业。

UPD:由于链接已断开,因此摘录如下:

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

1
即使在重新启动cron后也无法在ubuntu上运行
总体而言,2010年

1
@grosser:嗯,应该。请发布完整的crontab(编辑答案),以及它产生的输出以及您认为它不起作用的原因。然后我们将看到...
sleske

还要注意,VARIABLE = value行的格式比shell脚本中的限制要严格一些:每个赋值都必须位于其自己的行上,并且您不能在右侧使用变量(例如PATH = $ PATH:/ bla无效)。
sleske

我更新了问题,在单个crontab中设置PATH起作用了,只是全局更改没有起作用
总计

尝试在需要的每个crontab中指定PATH变量。可能是由于安全性问题而完成的。顺便说一句,在ubuntu中(我已经检查过),PATH是在ubuntu中的/ etc / crontab和/etc/cron.d/anacron中定义的。因此,似乎它没有从/ etc / crontab继承。只需尝试在root的crontab(sudo crontab -e)中定义它
igorp1024,2010年


1

我也找不到解决方案。我最接近一个体面的解决方案的内容如下(摘自https://raymii.org/s/tutorials/Better_cron_env_and_shell_control_with_the_SHELL_variale.html)。

  • 更改您的cron作业的外壳并将其指向bash脚本。即,在cronjob的顶部,添加: SHELL=/path/to/setup/cron.bash
  • 在此Shell脚本中,加载环境变量并指定其他var。确保在顶部包括以下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 "$@"

缺点:这要求您SHELL=...在每个cronjob的顶部指定。好处:您将使用常规环境变量,而不必担心在cron和其他变量之间保持一致


0

如果您可以成为root用户,可以尝试在其中编辑/etc/init.d/cron和更改PATH吗?我还没有测试过,但是检查起来会很有趣。


似乎没有工作,我只是说PATH = XXX到/etc/init.d/cron但* * * * *回声$ PATH输出是一样的
格罗瑟
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.