2016-09-10 3 views
1

У меня есть сценарий python, который я хочу запустить при запуске с правами root. Я считаю, что мне нужно добавить его в качестве служебного файла, но я не знаю, имеет ли он разрешение root. Вот как у меня есть файл службы. Файл python не будет запускаться, если только не root.Создание службы запуска для скрипта python для запуска от имени root в Arch Linux

[Unit] 
Description= Description here 

[Service] 
Type=simple 
ExecStart=/usr/bin/python /home/script.py 
StandardOutput=null 

[Install] 
WantedBy=multi-user.target 
Alias=script.service 

Любая помощь будет оценена по достоинству.

+0

Вы можете использовать cron? – benten

ответ

0

Systemd запускает многопользовательские службы с правами root, поэтому я не вижу, какая помощь вам нужна.

+0

Я знаю, что скрипт Python запускается и выполняет свою работу, может быть, не самый лучший способ, но он делает то, что мне нужно для этого, есть ли что-либо в служебном файле, который выглядит неправильно, вы думаете, что это может быть что-то с ExecStart –

+0

@ Nimda_R2 ExecStart в порядке. Если вы установили этот скрипт, и он работает не так, как ожидалось (и вы этого не сказали), здесь советы по отладке. Добавьте это в начало файла: 'import getpass; open ('/ home/whoami', 'w'). write (getpass.getuser()) ' Если файл даже не был создан, значит, вы неправильно установили скрипт, поэтому у вас есть проблема с systemd. –

+0

Итак, выход для файла whoami является root, но я могу сказать, что программа не запущена в корневом каталоге, потому что у меня есть раздел кода, который проверяет, работает ли программа в корне, когда я запускаю скрипт через служебный файл он не обнаруживает корень. Это сбивает с толку, я знаю, что работает .service, и я знаю, что работает python, но скрипт работает неправильно без root. есть ли что-то, что мне нужно добавить в файл .service? –

0

Получил его на работу. После того как я удалил корневую проверку из моего скрипта python, все работало нормально, я также удалил часть Type=simple из файла службы. После этих двух вещей он работал нормально.

корень проверка часть i удален был.

from os import getenv 
user = getenv("SUDO_USER") 
if user is None: 
    print ("This program needs to run as root") 
    exit(0) 

и служебный файл выглядит как этот

[Unit] 
Description= Description here 

[Service] 
ExecStart=/usr/bin/python /home/script.py 
StandardOutput=null 

[Install] 
WantedBy=multi-user.target 
Alias=script.service 

Я до сих пор не понимаю, почему мне нужно было взять чек корня, программа выполняет хорошо, когда я использовал sudo python script.py. По какой-то причине, когда сценарий запускался с помощью systemctl, он не выполнил проверку root.

Смежные вопросы