Как запустить задание cron от имени конкретного пользователя?

66

Я хотел бы запустить задание cron в качестве конкретного пользователя на моей машине. Как я могу указать пользователя для задания cron для запуска?

Задания cron будут выполняться на сервере (на Ubuntu 10.0.4). «Пользователи» - это пользователи, которые были созданы специально для выполнения определенных задач на стороне сервера. Эти «пользователи» имеют следующие общие черты:

  • Невозможно войти в систему
  • Ограниченный доступ к определенным папкам / файлам
morpheous
источник

Ответы:

79

Предполагая, что вы не можете просто войти и добавить его в crontab этого пользователя, поместите файл в /etc/cron.d. Он должен быть отформатирован как обычный cronjob, но с дополнительным полем. Перед выполнением команды и по истечении времени поставьте пользователя. Вы должны быть в состоянии найти примеры уже в вашей системе.

Пример:

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command
Daenyth
источник
Я думаю, что это правильный ответ. Я должен буду найти некоторые примеры и исследовать еще.
Morpheous
2
Плюс один из меня, это лучший способ сделать то, что вы хотите. Точнее загляните в файл / etc / crontab и вы увидите, что после временного шаблона и до команды там написано «root». Это означает, что «root» запускает эти команды. Просто добавьте свое собственное расписание и вместо «root» используйте любого пользователя. Также обратите внимание, что если вы используете crontabs для каждого пользователя (как предложено Eric D), вы можете потерять функциональность crontab для всей системы (/ etc / crontab и /etc/cron.d).
Паткос Чаба
3
Я думаю, что предпочтительным решением было бы просто crontab -u <user> -eхранить все в одном месте, что вы можете сделать как root Мне нравится группировать свои задания cron по функциям, а не просто по пользователю, так что это предпочтительное для меня решение.
Стюарт Н
41

От имени пользователя root отредактируйте cron пользователя user1:

crontab -u user1 -e

Вы также можете начать свою команду с:

su user1 -c foo bar

Но часто сценарии сами уменьшают свой доступ при запуске от имени пользователя root.

Эрик Дарчис
источник
1

Я искал это в течение пары недель, и это, наконец, сработало ...

Создайте свой скрипт как user1

ssh user1@ipaddress
nano hourly-event.sh

введите некоторую команду

#!/bin/bash
echo "YAY it works" > /home/user1/yay.txt

сделать его исполняемым

chmod 755 hourly-event.sh

отредактируйте crontab для user1

sudo crontab -u user1 -e

поместите строку внизу, указывая на ваш сценарий (ы)

# m h  dom mon dow   command
*   *   *   *   *    bash ./hourly-event.sh

выход - сохранение изменений (при сохранении будет отображаться каталог / tmp ... все в порядке)

подождите минуты

откройте ваш вновь созданный yay.txt

nano /home/user1/yay.txt

Теперь у вас должно быть открытое окно nano с надписью «YAY it работает» в качестве первой и единственной строки, если в нижней части окна nano указано «Новый файл ... ну .. я не знаю»

Вы также можете проверить свою новую запись в crontab для user1 по адресу: / var / spool / cron / crontabs / user1

PEACE

user220364
источник
0

Иногда вы можете захотеть, чтобы пользователь загрузил свою среду, особенно при использовании «rbenv», «nvm», вот так:

0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...

(здесь команда source ~/.bash_profileзагрузит вам среду Ruby или Node.

Сивей Шен 申思维
источник