Как остановить и запустить службу systemd с помощью скрипта Python без пароля sudo - PullRequest
0 голосов
/ 08 ноября 2018

Следующий скрипт позволяет мне проверить, активен ли systemd service, и остановить или запустить службу. При выполнении .stop() или .start(), как я могу перейти к остановке и запуску службы напрямую, без необходимости ввода пароля sudo? Примером применения, в котором это полезно, является остановка и перезапуск NetworkManager сервис.

#!/bin/python3

import subprocess
import sys


class SystemdService(object):
    '''A systemd service object with methods to check it's activity, and to stop() and start() it.'''

    def __init__(self, service):
        self.service = service


    def is_active(self):
        """Return True if systemd service is running"""
        try:
            cmd = '/bin/systemctl status {}.service'.format(self.service)
            completed = subprocess.run( cmd, shell=True, check=True, stdout=subprocess.PIPE )
        except subprocess.CalledProcessError as err:
            print( 'ERROR:', err )
        else:
            for line in completed.stdout.decode('utf-8').splitlines():
                if 'Active:' in line:
                    if '(running)' in line:
                        print('True')
                        return True
            return False


    def stop(self):
        ''' Stop systemd service.'''
        try:
            cmd = '/bin/systemctl stop {}.service'.format(self.service)
            completed = subprocess.run( cmd, shell=True, check=True, stdout=subprocess.PIPE )
        except subprocess.CalledProcessError as err:
            print( 'ERROR:', err )


    def start(self):
        ''' Start systemd service.'''
        try:
            cmd = '/bin/systemctl start {}.service'.format(self.service)
            completed = subprocess.run( cmd, shell=True, check=True, stdout=subprocess.PIPE )
        except subprocess.CalledProcessError as err:
            print( 'ERROR:', err )


if __name__ == '__main__':
    monitor = SystemdService(sys.argv[1])
    monitor.is_active()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...