crontab работает как конкретный пользователь

19

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

Сэм Конг
источник
3
Можете ли вы показать нам запись crontab, которую вы используете, пожалуйста?
user9517

Ответы:

33

Только /etc/crontabфайлы /etc/cron.d/имеют поле имени пользователя. В этом файле вы можете сделать это:

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

Из корневого каталога sudo crontab -eвы можете использовать:

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

Или вы можете использовать действительный пользовательский crontab следующим образом:

sudo crontab -u username -e

Второй столбец в любом кронтабе файла в течение часа , что вы хотите получить эту работу , чтобы запустить в. Вы имели в виду шестое поле?

Ladadadada
источник
Файл в /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 с указанным именем пользователя.
user9517
Ах, действительно. /etc/cron.d/файлы являются частью /etc/crontab. sudoтоже бессмысленно. Я удалю эту часть.
Ладададада
2
Что касается помещения sudo в crontab: (а) 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, вам следует использовать первый вариант.

CJC
источник
1

Типичный каталог для пользовательских crontabs находится в / var / spool / cron / crontabs. Формат файла тот, который не включает имя пользователя. Пользовательские crontabs принадлежат пользователю и названы в честь пользователя в режиме 0600. Лучше всего это сделать, написав файл вкладок и используя его crontab -u username filenameдля установки любых записей cron, которые вы хотите для этого пользователя.

Джефф Ферланд
источник