Запуск сценария после перезагрузки, но до входа в систему

Я пытаюсь уведомлять себя всякий раз, когда мой компьютер перезагружается, с помощью скрипта python. Я использую Ubuntu 20.04 LTS. Я пробовал запускать приложения, и хотя он работает, он запускает мой скрипт python только после входа в систему, что противоречит цели. Я попытался установить следующую строку в моем crontab

@reboot /bin/reboot_script.sh

, где reboot_script.sh содержит строку / usr / bin / python3 /bin/reboot_script.py. Я пробовал добавить root после @reboot , но, похоже, ничего не работает. В моем файле python используется модуль requests для проверки связи с сервером, который уведомляет меня о перезагрузке. Когда я запускаю программу с терминала после входа в систему, я получаю уведомление и код успешно выполняется.

Что мне не хватает? Где должны быть файлы, чтобы он запускался при перезагрузке? Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Я устанавливаю crontab путем выполнения следующих команд на терминале:

sudo crontab > my-crontab

Добавьте вышеупомянутую строку в конец файла. А затем выполните

crontab my-crontab

EDIT2: В соответствии с комментариями ниже, я добавил следующие строки в файл с именем reboot_notify.service и поместил его в / usr / lib / systemd / system / . ​​

[Unit]
Description=Notify on reboot

[Install]
WantedBy=multi-user.target

[Service]
ExecStart=/usr/bin/python /bin/reboot_notify.py

После этого я запустил systemctl daemon-reload , systemctl start reboot_notify.service и systemctl enable reboot_notify.service согласно ответу здесь .

Но даже сейчас уведомление было получено только после того, как я вошел в систему. Что нужно изменить?

1
задан 10 December 2020 в 13:58

1 ответ

Спасибо за ответы. Я смог исправить это, чтобы отправить мне сообщение перед входом в систему, как только машина перезагрузилась и сетевые службы подключились к сети. Я не обрабатывал состояние сетевого подключения в своем файле python, и мне не нужно было ждать, пока сеть будет установлена ​​​​для запуска кода. Что я сделал? Вот точные шаги.

  1. Создал файл с именем reboot_notify.service на рабочем столе.
  2. В мой файл добавлен следующий контент (скопированный и отредактированный из другого сервиса, уже находящегося в моей системе, доступного по адресу /usr/lib/systemd/system/)
[Unit]
Description=Notify on reboot

[Install]
WantedBy=multi-user.target

[Service]
ExecStart=/usr/bin/python3 /bin/reboot_notify.py

(Ошибка в вопросе заключалась в том, что python не существует в каталоге.) Я переместил свой файл python в /bin и использовал место установки по умолчанию python-3.x. ExecStart — это команда, которую нужно выполнить, вам нужно поместить команду, которую вы хотите запустить, здесь. Остальная часть файла копируется, кроме Описания.

  1. Перемещен .service с рабочего стола в /usr/lib/systemd/system/.
  2. Запустил systemctl daemon-reload, чтобы обновить список сервисов.
  3. Запустил systemctl start reboot_notify.service, чтобы запустить службу. Если есть какие-либо ошибки, вы получите их здесь. У вас не должно быть ошибок, чтобы продолжить.
  4. Запустил systemctl enable reboot_notify.service. В этот момент служба была запущена, и я получил уведомление о своей настройке.
  5. Перезагрузился, чтобы проверить, работает ли он. Так и было. Вы можете проверить статус службы, запустив systemctl status reboot_notify.service.

Большое спасибо @Matigo за комментарий, который помог мне в работе.

0
ответ дан 14 December 2020 в 05:31

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

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