У меня есть скрипт 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 ответ
Я предполагаю, что у вас уже есть 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
Похожие вопросы
Новые вопросы
python-3.x
НЕ ИСПОЛЬЗУЙТЕ, ЕСЛИ ВАШ ВОПРОС ТОЛЬКО ДЛЯ PYTHON 3. Всегда используйте вместе со стандартным тегом [python].
sudo journalctl -u site_monitor.service
?which python
выведет эту информацию.