У меня есть скрипт Python, которым я хочу управлять с помощью команд Linux. например как мы контролируем mysql: перезапуск службы mysql

Как добиться такой функциональности. Я видел, как это делают некоторые сценарии bash, но я ничего не знаю о сценариях bash. Спасибо.

ОБНОВИТЬ:

У меня есть скрипт site_monitor.py, который я включил в site_monitor.service в / etc / systemd / system /.

[Unit]
Description=Site Monitor Service
After=multi-user.target

[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/python3 /home/hemantsah/WisdomLeaf/site_monitor/site_monitor.py

[Install]
WantedBy=multi-user.target

Выполнив systemctl daemon-reload.service, я запустил сценарий, используя systemctl start site_monitor.service

Перечисляя все службы, использующие systemctl list-units --type=service, я вижу, что служба работает, но она ничего не делает.

Если я запустил свой скрипт python в терминале, используя python3 site_monitor.py, он заработает.

Я только что обнаружил, что запускаю службу и проверяю статус с помощью sudo service site_monitor status, Я проверил после запуска службы, все в порядке, проверка через некоторое время снова выдала мне эту ошибку:

hemantsah@pop-os:/etc/systemd/system$ sudo service site_monitor status
● site_monitor.service - Site Monitor Service
     Loaded: loaded (/etc/systemd/system/site_monitor.service; disabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Thu 2021-11-18 10:47:30 IST; 16s ago
    Process: 111989 ExecStart=/usr/bin/python3 /home/hemantsah/WisdomLeaf/site_monitor/site_monitor.py (code=exited, status=1/FAILURE)
   Main PID: 111989 (code=exited, status=1/FAILURE)

Nov 18 10:47:30 pop-os systemd[1]: site_monitor.service: Scheduled restart job, restart counter is at 5.
Nov 18 10:47:30 pop-os systemd[1]: Stopped Site Monitor Service.
Nov 18 10:47:30 pop-os systemd[1]: site_monitor.service: Start request repeated too quickly.
Nov 18 10:47:30 pop-os systemd[1]: site_monitor.service: Failed with result 'exit-code'.
Nov 18 10:47:30 pop-os systemd[1]: Failed to start Site Monitor Service.
Nov 18 10:47:34 pop-os systemd[1]: site_monitor.service: Start request repeated too quickly.
Nov 18 10:47:34 pop-os systemd[1]: site_monitor.service: Failed with result 'exit-code'.
Nov 18 10:47:34 pop-os systemd[1]: Failed to start Site Monitor Service.

Запуск sudo journalctl -u site_monitor.service дал мне следующую ошибку:

Nov 18 10:10:37 pop-os systemd[1]: site_monitor.service: Scheduled restart job, restart counter is at 4.
Nov 18 10:10:37 pop-os systemd[1]: Stopped Site Monitor Service.
Nov 18 10:10:37 pop-os systemd[1]: Started Site Monitor Service.
Nov 18 10:10:37 pop-os python3[111023]: Traceback (most recent call last):
Nov 18 10:10:37 pop-os python3[111023]:   File "/home/hemantsah/WisdomLeaf/site_monitor/site_monitor.py", line 3, in <module>
Nov 18 10:10:37 pop-os python3[111023]:     from bs4 import BeautifulSoup
Nov 18 10:10:37 pop-os python3[111023]: ModuleNotFoundError: No module named 'bs4'
Nov 18 10:10:37 pop-os systemd[1]: site_monitor.service: Main process exited, code=exited, status=1/FAILURE
Nov 18 10:10:37 pop-os systemd[1]: site_monitor.service: Failed with result 'exit-code'.
1
Hemant Sah 15 Ноя 2021 в 13:37

1 ответ

Лучший ответ

Я предполагаю, что у вас уже есть systemd на вашем компьютере, но если у вас его нет, вы можете установить его через диспетчер пакетов, например apt:

sudo apt-get install systemd

Затем вы можете создать свою собственную службу systemd. Для этого просто создайте новый файл в /etc/systemd/systemd/, например /etc/systemd/systemd/your_service_name.service. Этот файл должен выглядеть так:

[Unit]
Description= My service
After=multi-user.target

[Service]
Type=simple
WorkingDirectory=/path/to/your/working/dir/
User=<user>
Restart=always
ExecStart=/usr/bin/python3 /path/to/your/script/<script_name>.py

[Install]
WantedBy=multi-user.target

Конечно, вы можете использовать разные двоичные файлы python 3 вместо /usr/bin/python3. Кроме того, сама конфигурация сервиса может быть разной, приведенный выше пример - это просто базовая структура сервиса.

После создания этого файла (с разрешениями root) вы должны перезагрузить демон с помощью:

sudo systemctl daemon-reload

И если вы хотите, чтобы ваш скрипт оставался включенным, даже если сервер / компьютер перезагружается, запустите:

sudo systemctl enable your_service_name.service

Наконец, вы можете запустить свою службу, используя следующее:

sudo systemctl start your_service_name.service
2
ixperdomo 18 Ноя 2021 в 09:43
1
Это кажется забавным, сейчас я попробую. Спасибо за подробные инструкции.
 – 
Hemant Sah
15 Ноя 2021 в 15:15
1
Пожалуйста, обновите свой вопрос тем, что вы пробовали, и я изучу его (обязательно напишите что-нибудь, чтобы отличить исходный вопрос от части обновления).
 – 
ixperdomo
18 Ноя 2021 в 08:00
1
Не могли бы вы добавить вывод sudo journalctl -u site_monitor.service?
 – 
ixperdomo
18 Ноя 2021 в 08:23
1
Хм. Какой питон вы используете для самостоятельного запуска скрипта? which python выведет эту информацию.
 – 
ixperdomo
18 Ноя 2021 в 09:14
1
О, я дополню свой ответ одной вещью, которая может помочь (указанием пользователя). Добавьте его в свой файл и посмотрите, работают ли сейчас модули python.
 – 
ixperdomo
18 Ноя 2021 в 09:29