У меня есть вопрос относительно того, как я могу запустить приложение, написанное на python, как только загрузка будет завершена. Это приложение должно запускаться с полными разрешениями, поэтому пароли не требуются, так как есть две команды, которые оно запускает с помощью sudo.

Мне также нужно перезапустить приложение с теми же разрешениями, если приложение закрывается.

Я делал подобные вещи, но никогда не все вместе. Например, для запуска при загрузке. Я бы бросил короткий скрипт, который вызывает приложение, которое я хочу, в другой каталог, в каталог init.d. Затем, выполнив команду «update-rc.d app defaults», она автоматически запустится как часть сценариев запуска Ubuntu.

для перезапуска программы в случае сбоя другого простого скрипта

#!/usr/bin/python
from subprocess import Popen
import sys

filename = sys.argv[1]
while True:
    print("\nStarting " + filename)
    p = Popen("python " + filename, shell=True)
    p.wait()

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

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

Какие-либо предложения?

1 ответ1

0

Поэтому, получив предложение от Гленна Джекмана, я начал уделять больше времени изучению upstart/systemd. В итоге я посмотрел на systemd и выяснил ряд аспектов того, что искал.

одна из проблем заключалась в том, что до сих пор мне нужно было запускать программное обеспечение в корневой среде, поскольку это требовалось для некоторых программ-поставщиков, которые я использовал. Похоже, что когда вы настраиваете службу с помощью systemd, все запускается с привилегиями root. Так что позаботился об одном из моих вопросов.

Что касается запуска при загрузке и управления любыми завершениями программного обеспечения, оно обрабатывалось очень простым модульным файлом, расположенным по адресу /lib/systemd/system/app.service.

[Unit]
Description=this does something
WantedBy=multi-user.target

[Service]
exec executes my app
Restart
RestartSec

[Install]
wantedBy=multi-user.target

Далее я включил новый сервис с помощью systemctl

sudo systemctl enable app.service
sudo systemctl daemon.reload
sudo systemctl start app.service

это позволило запустить при загрузке и проверить его прямо сейчас.

Еще раз спасибо Гленну за то, что он указал мне правильное направление.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .