Запуск сценария через crontab при перезагрузке [дубликат]

Я использую Ubuntu Server 16.04. Каждый раз, когда я вхожу в систему, мне нужно вручную запускать мой сценарий: /home/user/ini.sh . Этот сценарий вызывает другие сценарии, которым требуются разрешения sudo , поэтому я получаю приглашение, вставляю свой пароль и готово. Теперь я хочу настроить способ автоматического запуска сценария при запуске системы.

Я использовал crontab -e и добавил строку

@reboot /home/user/ini.sh

Это не работает. Я пробовал различные варианты, предложенные другими пользователями в здесь , здесь , здесь или здесь .

@reboot user    /home/user/ini.sh
@reboot root    /home/user/ini.sh
@reboot sh      /home/user/ini.sh
*/1 * * * *     /home/user/ini.sh
....

добавление SHELL = / bin / bash ... Но я не могу заставить его работать. Я также пробовал

@reboot echo "yes" > /home/user/yes.txt

И файл создается - правда, пустой, без содержимого внутри (это демонстрирует, что что-то работает, но я где-то делаю ошибку).

Где моя ошибка?


ИЗМЕНИТЬ

Я также безуспешно пытался sudo crontab -e и использовать

@reboot root    /home/user/ini.sh
1
задан 14 February 2018 в 19:58

1 ответ

Существует большая разница между перезагрузкой и входом в систему, и Ваша система рассматривает их обоих вполне по-другому.

  • Задания ПЕРЕЗАГРУЗКИ выполняются полностью пользователь (не Ваш пользователь) и должны быть бездисплейными (никакой дисплей). Лучший способ делать работы времени начальной загрузки в 16,04 и более новый состоит в том, чтобы создать сервис и включать тот сервис в соответствующую цель systemd во время процесса начальной загрузки.

  • Задания ВХОДА В СИСТЕМУ выполняются Вашим пользователем (не корень) после ввода пароля. Лучший способ делать работы входа в систему состоит в том, чтобы разместить их в Ваш ~/.config/autostart/ каталог.

Но у Вас есть вторая проблема. Вы, кажется, хотите, чтобы задание уровня пользователя использовало сервисы корневого уровня. Существуют многие, много способов сделать это.

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

  • Самый быстрый путь состоит в том, чтобы взломать в sudoers файл и генерирует специальный набор полномочий. Однако это не может скопировать правильно с остальной частью Вашей системы, AppArmor может заблокировать некоторые действия так или иначе, и трудно диагностировать и поддержать.

  • Соответствующий путь состоит в том, чтобы разделить Ваши функции уровня пользователя и корневого уровня на два отдельных сценария, и использовать dbus для запуска сценария корневого уровня и возврата, он производится. Это легко поддержать и диагностировать, но требует самого большого навыка и небольшого количества приобретения знаний о dbus.

4
ответ дан 3 December 2019 в 06:52

Другие вопросы по тегам:

Похожие вопросы: