Como posso iniciar o aplicativo mono na inicialização com direitos de root?

0

Recentemente eu escrevi o programa usando o Mono. Este programa precisa dos direitos de root e eu quero que ele seja iniciado na inicialização.

Eu tenho o Ubuntu 16.04.

Eu já tentei usar "/etc/rc.local" (seguido este link e this )

/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 "$@"

Permissões do rc.local

    
por Yahniukov 20.01.2018 / 11:34

1 resposta

2

Como você está executando o Ubuntu 16.04, que por padrão usa systemd , você deve escrever uma unidade de serviço systemd para controlar o comportamento de inicialização do seu aplicativo.

Um arquivo% unitsystemd simples é semelhante ao seguinte, assumindo que mono esteja em /usr/bin/mono , pois a linha ExecStart deve começar com um caminho absoluto.
Salve isso em /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

Você adicionou "$@" , o que significa que alguns parâmetros foram passados para o seu comando, portanto, é necessário substituir <your-parameters> pelos realmente usados.
Você também pode usar o systemd options Environment ou EnvironmentFile para armazenar isso. Para mais informações, dê uma olhada nas páginas man systemd.unit , systemd.service e systemd.exec .

Depois de criar o arquivo, execute o comando da seguinte maneira para informar systemd de que houve uma alteração.

systemctl daemon-reload

Agora você deve poder controlar o serviço da seguinte maneira. Para uma descrição completa, consulte man systemctl .

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

Para ativar o serviço como inicialização, você precisa digitar o comando da seguinte forma.

systemctl enable my-mono-app

Dependendo do comportamento do seu script e aplicativo, pode ser necessário alterar a Type=simple part para oneshot ou forking . Não que você tenha que executar systemctl daemon-reload depois de ter feito alterações no arquivo my-mono-app.service para obter as alterações.

    
por Thomas 20.01.2018 / 12:34