Вопрос новичка о службе, python и консоли

Я новичок как в ubuntu, так и в написании сценариев на python. Я написал скрипт на python, который при запуске из оболочки отслеживает некоторые события и записывает эти события в оболочку. Все это работает нормально.

Я хотел бы, чтобы сценарий python запускался как служба при загрузке и использовал systemd для запуска моего .sh файла. Теперь, после загрузки, если я проверю статус моей службы, она говорит, что запущена, но не пишет в оболочку.

Я искал в гугле, как получить видимую обратную связь со скриптом, но безрезультатно. Кто-нибудь может направить меня в нужном направлении?

Спасибо всем. Счастливых праздников.

0
задан 16 December 2020 в 17:18

2 ответа

Вы должны указать системе, какой именно $DISPLAY должен использовать сценарий.

Поскольку $DISPLAY не может быть активным при загрузке (перед входом в систему), у вас, похоже, проблема с дизайном.

Большинство людей используют свои скрипты для записи в файл, или в журнал, или в какой-либо другой сервис, а затем извлекают значения, используя другой процесс, у которого есть $DISPLAY.

1
ответ дан 19 December 2020 в 22:18

Не совсем понял, зачем нужен файл .sh... Если нужно запустить Python-скрипт и получить логи, то обычно это делается через журнальный файл. Я бы сделал так:

Создать скрипт в домашней папке:

touch ~/example.py
nano ~/example.py

В example.py:

from datetime import datetime
import time

while True:
    time.sleep(1)
    mytime = datetime.now().strftime("%m/%d/%Y, %H:%M:%S")
    with open("example.log", "a") as myfile:
        myfile.write(mytime + "\n")

Далее создал бы сервис:

sudo chmod +x ~/example.py
sudo touch /etc/systemd/system/example.service
sudo nano /etc/systemd/system/example.service

В файле сервиса:

[Unit]
Description=Example

[Service]
WorkingDirectory=/home/user/
ExecStart=/usr/bin/python3 /home/user/example.py
Restart=on-failure

[Install]
WantedBy=multi-user.target

Перезагрузка сервисов:

sudo systemctl daemon-reload

Затем вы можете использовать сервис:

sudo systemctl start example
sudo systemctl enable example
cat ~/example.log

Иногда вы можете использовать print(""). Затем сервисные логи будут выдаваться командой: journalctl -u example -b


Вы можете использовать мое приложение для создания сервисов в Ubuntu, где этот алгоритм абстрагирован от пользователя в пользу упрощения: Служба Linux


И вас с праздником

0
ответ дан 4 January 2021 в 17:54

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

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