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

142038
morpheous

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

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

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

4 ответа на вопрос

74
Daenyth

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

Пример:

#<timing> <user> <command> 11 * * * * root /usr/lib/command 
Я думаю, что это правильный ответ. Я должен буду найти некоторые примеры и исследовать еще. morpheous 14 лет назад 0
Плюс от меня, это лучший способ сделать то, что вы хотите. Точнее загляните в файл / etc / crontab и вы увидите, что после временного шаблона и до команды там написан «root». Это означает, что «root» запускает эти команды. Просто добавьте свое собственное расписание и вместо «root» используйте любого пользователя. Также обратите внимание, что если вы используете crontabs для каждого пользователя (как предложено Eric D), вы можете потерять функциональность crontab для всей системы (/ etc / crontab и /etc/cron.d). Patkos Csaba 14 лет назад 2
Я думаю, что предпочтительным решением будет просто `crontab -u -e` хранить все в одном месте, что вы можете сделать как root. Мне нравится группировать свои задания cron по функциям, а не только по пользователям, так что это предпочтительное для меня решение. Stuart H 7 лет назад 3
39
Eric Darchis

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

crontab -u user1 -e 

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

su user1 -c foo bar 

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

0
user220364

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

Создайте свой скрипт как 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

0
Siwei Shen申思维

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

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

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