Як встановити cron PATH в усьому світі (тобто для всіх користувачів) постійно?


10

Нам потрібно мати / usr / local / bin в шляху до cron для всіх користувачів. Чи є спосіб встановити його в усьому світі, не потребуючи редагування кронівок кожного користувача?

Ми спробували додати 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

Відповіді:


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

1
не працює на ubuntu, навіть після перезавантаження cron
grosser

1
@grosser: Ну, так і повинно. Будь ласка, опублікуйте повний crontab (відредагуйте свою відповідь) разом із результатами, які він видає, і чому ви вважаєте, що це не працює. Тоді ми побачимо ...
sleske

Також зауважте, що формат рядків значення VARIABLE = дещо обмежений, ніж у скрипті оболонки: кожне призначення повинно бути у власному рядку, і ви не можете використовувати змінні праворуч (наприклад, PATH = $ PATH: / bla не буде працювати).
sleske

я оновив питання, встановивши PATH в окремому Crontab, спрацювало, просто глобальна зміна не спрацювала
grosser

Спробуйте вказати змінні PATH у кожному crontab, де вам це потрібно. Можливо, це зроблено через проблеми безпеки. BTW, в ubuntu (я перевірив) PATH визначається в / etc / crontab та /etc/cron.d/anacron в ubuntu. Тож здається, що він не успадковується від / etc / crontab. Просто спробуйте визначити це в crontab root ( sudo crontab -e)
igorp1024


1

Я також не міг знайти рішення для цього. Найближче до гідного рішення - наступне (взято з https://raymii.org/s/tutorials/Better_cron_env_and_shell_control_with_the_SHELL_variale.html ).

  • Змініть оболонку для своєї роботи в cron і вкажіть її на скрипт bash. Тобто, у верхній частині кроні, додайте: SHELL=/path/to/setup/cron.bash
  • У цьому скрипті оболонки завантажте змінні середовища середовища та вкажіть інші vars. Не забудьте включити наступні 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=...верхню частину кожної роботи. Вгору: ви будете використовувати звичайні змінні середовища, і вам не доведеться турбуватися про збереження змінних між cron та іншими


0

Якщо ви можете мати root, чи можете ви спробувати редагувати /etc/init.d/cronта змінювати PATH там? Я цього не перевіряв, але було б цікаво перевірити.


не здавалося, я просто додав PATH = xxx у /etc/init.d/cron, але вихід * * * * * ехо $ PATH був таким самим
grosser
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.