Недавно я написал программу, используя 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 "$@"
Поскольку вы используете 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
, чтобы получить эти изменения.