Ficheiros da unidade systemd gerados por fantoches?

3

Eu esperava que o seguinte realmente iniciasse meu serviço:

service{'legacy':
  ensure   => running,
  start    => "cd /vagrant/nginx-reverse-proxy/legacy && /usr/bin/bundle exec ruby app.rb -o 127.0.0.1 -e production -p ${port}",
  provider => 'systemd',
}

Eu sei e entendo que o comando de partida não está correto, mas eu não sei como iniciar o aplicativo Ruby Sinatra. Eu realmente esperava que algo assim funcionasse:

service{'legacy':
  ensure   => running,
  command  => "cd /vagrant/nginx-reverse-proxy/legacy && /usr/bin/bundle exec ruby app.rb -o 127.0.0.1 -e production -p ${port}",
  provider => 'systemd',
}

Um pouco como o cron. Estou acostumado a daemontools, e o modelo do systemd é completamente diferente. Eu tenho que criar o arquivo da unidade sozinho? E ligar o arquivo da unidade?

Encontrei Como ativar o serviço instanciado systemd com o fantoche? que inicia algum tipo de dispositivo USB. Eu também encontrei o camptocamp / puppet-systemd que parece gerenciar o próprio systemd. Os documentos do Puppet no provedor de serviços do systemd são bastante esparsos em detalhes.

Como se cria um serviço systemd usando o Puppet?

    
por François Beausoleil 13.11.2016 / 04:52

1 resposta

10

Sim, você precisa criar um arquivo de unidade. O atributo de comando que você especificou não é realmente um atributo válido para o serviço recurso

É melhor adicionar um modelo ERB ao seu arquivo de unidade, aqui está um exemplo :

[Unit]
Description=My Ruby Service
Wants=basic.target
After=basic.target network.target

[Service]
WorkingDirectory=/vagrant/nginx-reverse-proxy/legacy
ExecStart=/usr/bin/bundle exec ruby app.rb -o 127.0.0.1 -e production -p 4567"
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

Em seguida, configure o modelo no Puppet e atualize o systemd. Algum código de exemplo:

file { '/lib/systemd/system/myservice.service':
  mode    => '0644',
  owner   => 'root',
  group   => 'root',
  content => template('modulename/myservice.systemd.erb'),
}~>
exec { 'myservice-systemd-reload':
  command     => 'systemctl daemon-reload',
  path        => [ '/usr/bin', '/bin', '/usr/sbin' ],
  refreshonly => true,
}

Agora pronto, você pode iniciar o serviço normalmente:

service { 'myservice':
  ensure   => running,
  enable   => true,
  provider => provider,
}
    
por 13.11.2016 / 07:15

Tags