Como posso executar um programa como usuário root quando minha máquina Ubuntu 15.04 é inicializada?

3

No Ubuntu 15.04 eu tenho este arquivo: / usr / local / bin / myscript (é um script que eu fiz).

Se eu executar este comando na minha conta, ele fará o que eu preciso para fazer como usuário root: sudo / usr / local / bin / myscript

Eu quero agora fazer com que / usr / local / bin / myscript seja executado na inicialização da máquina, mas como usuário root (como se eu estivesse executando o comando sudo mas sem ter que digitar nenhuma senha) . Como isso é feito no Ubuntu 15.04?

    
por user2580 11.05.2015 / 11:35

3 respostas

13

E agora, a resposta do sistema.

Você está usando o Ubuntu versão 15. Você tem o systemd. /etc/rc.local é, na melhor das hipóteses, um mecanismo de compatibilidade com versões anteriores no systemd. E como mostrado pela confusão na questão AskUbuntu com hiperlink abaixo, usá-lo pode dar errado. Então, faça uma unidade de serviço apropriada.

Você está criando uma unidade de serviço local, sem pacote e sem sistema, de modo que o arquivo da unidade estará em /etc/systemd/system/ , que é onde esse tipo de unidade está. Vamos chamá-lo de /etc/systemd/system/myscript.service . Contém:

[Unit]
Description=user2580's script
Documentation=https://unix.stackexchange.com/questions/202698/

[Service]
Type=simple
ExecStart=/usr/local/bin/myscript

[Install]
WantedBy=multi-user.target

Se o seu script forks ", a fim de domonize", então pare de fazê-lo. Isso é completamente desnecessário.

  • Execute systemctl preset myscript.service (como o superusuário) para que ele seja iniciado automaticamente no bootstrap.
  • Execute systemctl start myscript.service (como superusuário) para iniciá-lo manualmente agora mesmo.
  • Execute systemctl status myscript.service para ver seu status.

Observe que isso não executa seu script em um contexto em que ele possa falar com um servidor X. Pode ser executado antes de um servidor X ser iniciado. Mas você não menciona nenhum requisito para ser um cliente X, nem para outras complexidades que picam novatos como uma variável de ambiente HOME . E esses são assuntos para outras questões, em qualquer caso. Então eu vou deixar assim.

Leitura adicional

por 11.05.2015 / 15:26
2

Você pode simplesmente adicionar uma linha para chamar o script em /etc/rc.local . Este arquivo é o último dos scripts init a serem executados.

Apenas certifique-se de que /etc/rc.local seja executável e de propriedade de root.

    
por 11.05.2015 / 11:53
-1

Você pode usar gksudo : -

NAME
       gksu - GTK+ frontend for su and sudo


DESCRIPTION           
       gksu is a frontend to su and gksudo is a frontend to sudo.  Their primary purpose is to run graphical commands
       that need root without the need to run an X terminal emulator and using su directly.
  • Abra os aplicativos de inicialização (Configurações do sistema > Aplicativos de inicialização ou gnome-session-properties ).
  • Adicione uma nova entrada com o seguinte comando ( gksudo myscript ou gksudo /usr/local/bin/myscript ): -

Clique em Adicionar e este script será executado quando você iniciar / acessar a área de trabalho.

Observação: - Verifique se gksu está instalado para trabalhar com gksudo . (você pode instalá-lo por sudo apt-get install gksu )

Outra maneira é usar o programa Askpass, que funciona com sudo -A : -

-A, --askpass
                 Normally, if sudo requires a password, it will read it from the user's terminal.  If the -A
                 (askpass) option is specified, a (possibly graphical) helper program is executed to read the user's
                 password and output the password to the standard output.  If the SUDO_ASKPASS environment variable
                 is set, it specifies the path to the helper program.  Otherwise, if sudo.conf(5) contains a line
                 specifying the askpass program, that value will be used.  For example:

                     # Path to askpass helper program
                     Path askpass /usr/X11R6/bin/ssh-askpass

Exemplo eu uso zenity como helper auxiliar.

    
por 11.05.2015 / 11:47