LINUX.ORG.RU
ФорумAdmin

Создание службы для запуска скрипта

 , ,


0

2

Добрый день! Есть скрипт написанный на python он берет и записывает данные в базу SQLite в том же каталоге. Хочу запускать его как службу, сделал конфиг /etc/systemd/system/pythonscript.service

[Unit]
Description = Check BD
After = multi-user.target

[Service]
ExecStart = /usr/bin/python3 '/home/pi/script/index.py' > /home/pi/script/script.log 2>$1
Type = idle

[Install]
WantedBy = multi-user.target

При запуске данной службы в логах ошибка python, что файл БД не найден. Подскажите, пожалуйста, как правильно создать службу или куда необходимо положить файл БД, чтоб это работало?



Последнее исправление: Vasai (всего исправлений: 1)

> /home/pi/script/script.log 2>$1

Убери это, systemd — не шелл.

Type = idle

Type=oneshot или Type=simple

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)

Подскажите, пожалуйста, как правильно создать службу

1. Создаёшь /usr/bin/pepiaka.sh, в котором пускаешь свой pepiaka.py. Проверяешь, как оно работает из консольки.

2. Создаёшь unit для запуска /usr/bin/pepiaka.sh.

3. profit

0. Твой скрипт должен уметь обрабатывать SIGTERM, SIGINT

[Unit]
Description=Mega pepiaka

[Service]
Type=simple
ExecStart=/usr/bin/pepiaka.sh
Restart=always
RestartSec=30
User=user

[Install]
WantedBy=multi-user.target
vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)

в systemd не используется башевский синтаксис. Либо явно пропиши в ExecStart команду bash -c "...", либо перенаправляй вывод с помощью StandardOutput и StandardError.

anonymous
()

При запуске данной службы в логах ошибка python, что файл БД не найден.

Скрипт при ручном запуске-то работает вообще? Для sqlite путь к файлу с бд нужно указывать, когда connection создаешь. Если не находит файл - значит путь неправильный, очевидно.

xxblx ★★★
()

ExecStart = /usr/bin/python3 '/home/pi/script/index.py' > /home/pi/script/script.log 2>$1

По-хорошему все эти «кишки» лучше прятать в ваш скрипт. Для логирования модуль logging.

Путь до файла бд в вашем случае вероятно тоже стоит указывать или абсолютный, или же определять через os.path.dirname. Это вам позволит убрать тучу спецэффектов с запуском скрипта.

Deleted
()
Последнее исправление: Rainor (всего исправлений: 1)
Ответ на: комментарий от vvn_black

1. Создаёшь /usr/bin/pepiaka.sh, в котором пускаешь свой pepiaka.py. Проверяешь, как оно работает из консольки.

Если БД указана через relative-path его это никак не спасёт( FileNotFoundError)

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.