Ubuntu 15.04 systemd vs upstart

0

Ao contrário das versões anteriores, o Ubuntu 15.04 agora usa systemd em vez de upstart . Para iniciar programas na inicialização, sempre criei arquivos conf em /etc/init/ . Eles ficariam assim:

start on login-session-start
script
/usr/bin/x11vnc -auth /var/run/lightdm/root/:0  -display :0  -rfbauth /etc/x11vnc.pass  -rfbport 5900  -noxrecord -noxfixes -noxdamage -forever -bg  -o /var/log/x11vnc.log
end script

Infelizmente, isso não funciona mais no Ubuntu 15.04 e eu estava tentando encontrar um equivalente a este arquivo conf que é executado com o systemd. Embora a internet ainda não fosse tão engenhosa.

O que é necessário para iniciar o arquivo conf acima na inicialização? Existem tradutores entre upstart e systemd?

    
por Socrates 16.06.2015 / 00:49

1 resposta

4

Se você quiser, pode criar um arquivo systemd .service que faça a mesma coisa. Um arquivo systemd .service básico para o comando acima pode ter a seguinte aparência:

[Unit]
Description=Start VNC server
Requires=lightdm.service
After=lightdm.service

[Service]
ExecStart=/usr/bin/x11vnc -auth /var/run/lightdm/root/:0  -display :0  -rfbauth /etc/x11vnc.pass  -rfbport 5900  -noxrecord -noxfixes -noxdamage -forever

[Install]
WantedBy=graphical.target

Coisas a serem observadas:

  • Como esse serviço depende do início do lightdm, adicionei um Requires=lightdm.service . Isso significa que se este serviço for solicitado para iniciar, então lightdm.service também será solicitado a iniciar, mas se lightdm.service falhar ao iniciar, este serviço não será solicitado a iniciar. Além disso, After=lightdm.service é necessário para que este serviço seja iniciado após o término do 'lightdm.service.
  • O comando que está sendo executado não tem -bg especificado. No systemd, é preferível que os serviços permaneçam em primeiro plano, para que o systemd saiba que eles estão em execução. Note que é possível especificar um arquivo PID para um serviço que entra em segundo plano.
  • WantedBy=graphical.target especifica que, como parte da inicialização da GUI, isso também deve ser iniciado.

Para instalar esse arquivo para que o serviço seja executado como raiz, adicione esse arquivo em /etc/systemd/system . Em seguida, execute sudo systemctl enable <filename> (onde <filename> é o nome do arquivo de serviço em /etc/systemd/system ). Um link simbólico deve ser criado em /etc/systemd/system/graphical.target.wants/ . Após a reinicialização, quando você executar systemctl status <filename> , deverá ver que o serviço é reconhecido e ainda não foi iniciado.

Observe que /etc/systemd/system/ é destinado a serviços em todo o sistema que o administrador do sistema (você) adiciona. /lib/systemd/system/ é destinado a serviços em todo o sistema instalados por pacotes. Você não precisa fazer um symlink para /lib/systemd/system/ para o serviço carregar. A tabela abaixo (tirada da systemd.unit manpage) descreve a localização de cada localização no que diz respeito aos serviços do sistema (existem caminhos separados para os serviços do usuário):

   ┌────────────────────┬─────────────────────────────┐
   │Path                │ Description                 │
   ├────────────────────┼─────────────────────────────┤
   │/etc/systemd/system │ Local configuration         │
   ├────────────────────┼─────────────────────────────┤
   │/run/systemd/system │ Runtime units               │
   ├────────────────────┼─────────────────────────────┤
   │/lib/systemd/system │ Units of installed packages │
   └────────────────────┴─────────────────────────────┘
    
por saiarcot895 16.06.2015 / 01:35