Как я могу запустить моно приложение при запуске с рут правами?

Недавно я написал программу, используя Mono. Этой программе нужны права root, и я хочу, чтобы она запускалась при запуске.

У меня Ubuntu 16.04.

Я уже пытался использовать «/etc/rc.local» (следовал по этой ссылке и по )

/etc/rc.local:

#!/bin/sh -e
sudo game_backup.sh "$@" &

exit 0

/usr/local/bin/game_backup.sh:

#!/bin/bash
cd /home/yahniukov/Documents/programs/my_programs/game_backup
sudo mono ./backup.exe "$@"

Разрешения rc.local

0
задан 20 January 2018 в 13:34

1 ответ

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

Простой файл systemd выглядит следующим образом, предполагая, что mono находится в /usr/bin/mono, поскольку строка ExecStart должна начинаться с абсолютного пути.
Сохраните это в /etc/systemd/system/my-mono-app.service.

[Unit]
Description=my mono app
# If the service relies on network uncomment the next line.
#After=network.target

[Service]
Type=Simple
ExecStart=/usr/bin/mono /home/yahniukov/Documents/programs/my_programs/game_backup/backup.exe <your-parameters>

[Install]
WantedBy=multi-user.target

Вы добавили "$@", что подразумевает, что в вашу команду переданы некоторые параметры, поэтому вы должны заменить <your-parameters> фактически используемыми.
Вы также можете использовать опции systemd Environment или EnvironmentFile, чтобы сохранить это. Для получения дополнительной информации загляните в справочные страницы systemd.unit, systemd.service и systemd.exec.

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

systemctl daemon-reload

Теперь вы сможете управлять сервисом следующим образом. Полное описание см. В man systemctl.

systemctl status my-mono-app
systemctl start my-mono-app
systemctl stop my-mono-app
systemctl restart my-mono-app

Чтобы включить службу при запуске, вы должны ввести команду следующим образом.

systemctl enable my-mono-app

В зависимости от поведения вашего сценария и приложения может потребоваться изменить часть Type=simple на oneshot или forking. Не то чтобы вам нужно было запускать systemctl daemon-reload после того, как вы внесли изменения в файл my-mono-app.service, чтобы получить эти изменения.

3
ответ дан 20 January 2018 в 13:34

Другие вопросы по тегам:

Похожие вопросы: