8

Нам нужно иметь /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

4 ответа4

4

Вы можете настроить PATH в файле конфигурации crontab, как показано в первом коде, за исключением этого. Сначала укажите переменные 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
3

Установка переменной PATH должна работать в Ubuntu, как вы говорите, она не работает?

См. № 14: Linux Crontab: 15 великолепных примеров заданий Cron

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
  • В этом сценарии оболочки загрузите переменные окружения и укажите другие переменные. Не забудьте включить следующие 4 строки вверху. Он сбрасывает переменную SHELL в bash и запускает оболочку bash для запуска 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=... в верхней части каждого кронштейна. Перевернутая сторона: вы будете использовать обычные переменные окружения, и вам не придется беспокоиться о том, чтобы поддерживать переменные согласованными между cron и другими

0

Если вы можете быть пользователем root, можете ли вы отредактировать /etc/init.d/cron и изменить там PATH? Я не проверял это, но было бы интересно проверить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .