crontab працює як конкретний користувач


20

Мені потрібно щодня запускати сценарій. Сценарій повинен запускатися як конкретний користувач (колишній user1), а не як root. Тож я помістив файл cron в /etc/cron.d і помістив ім'я користувача у рядок (2-й стовпець). Але він дає помилку, кажучи, що команда не знайдена. Я підозрюю, що сценарій не запускався як середовище user1. Я щось пропустив?


3
Чи можете ви показати, будь ласка, запис crontab, який ви використовуєте, будь ласка?
користувач9517

Відповіді:


34

Тільки /etc/crontabі для файлів у полі /etc/cron.d/є ім’я користувача. У цьому файлі ви можете зробити це:

1 1 * * * username /path/to/your/script.sh

Із crontab кореня sudo crontab -eви можете використовувати:

1 1 * * * su username -c "/path/to/your/script.sh"

Або ви можете скористатися фактичним кронтабом користувача таким чином:

sudo crontab -u username -e

Другий стовпець в будь-якому кронтаб файлу в протягом години , що ви хочете отримати цю роботу , щоб запустити в. Ви мали на увазі шосте поле?


Файл у /etc/cron.d прийміть аргумент користувача: help.ubuntu.com/community/CronHowto#Advanced_Crontab і чому ви робите "sudo su", якщо виконуєте як root? У будь-якому випадку, ви хочете, щоб "su -l" використовував середовище входу для користувача, оскільки це, швидше за все, проблема PATH, з опису проблеми.
cjc

Чи не файли в /etc/cron.d є розширенням / etc / crontab? У системах я повинен передати всі файли в /etc/cron.d із зазначенням імені користувача.
користувач9517

А, справді. /etc/cron.d/Файли є частиною /etc/crontab. sudoтакож безглуздо. Я видалю цю частину.
Ladadadada

2
Щодо розміщення судо в кронтабі: (а) sudo su... взагалі непотрібне; sudo -u <user> <command>зазвичай достатньо. (b) sudo задихнеться в деяких системах, якщо TTY не додається (наприклад, коли працює за допомогою cron). Це можна зафіксувати у вашому файлі sudoers.
tylerl

4

Вам може знадобитися встановити PATH для цього користувача, якщо виконуваний файл, який ви використовуєте, знаходиться у, скажімо, / usr / local / bin. Щоб встановити PATH, поставте щось подібне перед cronjobs:

PATH=/bin:/usr/bin:/usr/local/bin

*/5 * * * * user1 sample_executable

Інший спосіб полягає в тому, щоб повністю вказати шлях до sample_executable у вашій cronjob, таким чином:

*/5 * * * * user1 /path/to/sample_executable

Якщо sample_executable посилається на виконувані файли, що не є стандартними PATH, слід скористатися першою опцією.


1

Типовий каталог для користувачів crontabs знаходиться в / var / spool / cron / crontabs. Формат файлу - це той, який не включає ім’я користувача. Кронтабелі користувачів належать користувачеві та названі його ім'ям у режимі 0600. Найкраще це вирішується, записавши файл вкладки та використовуючи crontab -u username filenameналаштування будь-яких записів крона для цього користувача.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.