Тема: автоматизація створення сервісів Archlinux

назва файлу: create_service.py
код:

import os
import sys

def create_service(name, command):
    # Створити файл служби у директорії /etc/systemd/system
    filename = f"/etc/systemd/system/{name}.service"
    with open(filename, "w") as f:
        f.write(f"""[Unit]
Description={name}

[Service]
Type=simple
ExecStart={command}

[Install]
WantedBy=multi-user.target
""")

    # Перезавантажити демон systemd
    os.system("sudo systemctl daemon-reload")

    # Додати службу до списку служб, які повинні запускатися при завантаженні системи
    os.system(f"sudo systemctl enable {name}")

def start_service(name):
    # Запустити службу
    os.system(f"sudo systemctl start {name}")

# Перевірити, чи скрипт запущений з правами sudo
if not os.geteuid() == 0:
    print("Цей скрипт повинен бути запущений з правами sudo!")
    sys.exit(1)

# Отримати аргументи командного рядка
if len(sys.argv) < 3:
    print("Використання: sudo python create_service.py <назва служби> <команда для виконання>")
    sys.exit(1)

service_name = sys.argv[1]
service_command = " ".join(sys.argv[2:])
create_service(service_name, service_command)
start_service(service_name)

спосіб використання і так зрозумілий, якщо ви не бачите його в коді, напишіть
python3 create_service.py
вилізе підказка, і вас "викине" з скрипта

скрипт запускати від sudo, якщо не зробите цього - теж підказка вилізе

якщо ви не впевнені що зможете ввести правильно з пешого разу - можете додати перевірку


просто, нехай цей код тут лежить, може колись до нього прийду і подякую собі теперішньому

якщо хтось знає кращий спосіб, буду вдячний
...хоч я і не зовсім впевнений що він буде працювати коректно))
(це не ubuntu, rc-local.service тут немає)

Подякували: Pernat1y1

2 Востаннє редагувалося Pernat1y (28.02.2023 20:38:29)

Re: автоматизація створення сервісів Archlinux

Навіщо "sudo ..." в os.system, якщо скрипт запускається від рута?)
Також можна одразу робити

systemctl enable --now ...

, тоді служба одразу стартує.

Подякували: Firefox is dead1