Я пытаюсь уведомлять себя всякий раз, когда мой компьютер перезагружается, с помощью скрипта 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
согласно ответу здесь .
Но даже сейчас уведомление было получено только после того, как я вошел в систему. Что нужно изменить?
Спасибо за ответы. Я смог исправить это, чтобы отправить мне сообщение перед входом в систему, как только машина перезагрузилась и сетевые службы подключились к сети. Я не обрабатывал состояние сетевого подключения в своем файле python, и мне не нужно было ждать, пока сеть будет установлена для запуска кода. Что я сделал? Вот точные шаги.
reboot_notify.service
на рабочем столе. /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
— это команда, которую нужно выполнить, вам нужно поместить команду, которую вы хотите запустить, здесь. Остальная часть файла копируется, кроме Описания
.
.service
с рабочего стола в /usr/lib/systemd/system/
. systemctl daemon-reload
, чтобы обновить список сервисов. systemctl start reboot_notify.service
, чтобы запустить службу. Если есть какие-либо ошибки, вы получите их здесь. У вас не должно быть ошибок, чтобы продолжить. systemctl enable reboot_notify.service
. В этот момент служба была запущена, и я получил уведомление о своей настройке. systemctl status reboot_notify.service
. Большое спасибо @Matigo за комментарий, который помог мне в работе.