6 votes

Fichiers unitaires systemd générés par Puppet ?

J'attendais les éléments suivants pour démarrer mon service :

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',
}

Je sais et comprends que la commande start n'est pas correcte, mais je ne sais pas comment démarrer l'application Ruby Sinatra. Je m'attendais en fait à ce que quelque chose comme ça fonctionne :

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',
}

Un peu comme cron. Je suis habitué aux daemontools, et le modèle de systemd est complètement différent. Dois-je créer le fichier unit moi-même ? Et lier le fichier unitaire ?

J'ai trouvé Comment activer le service instancié systemd avec Puppet ? qui démarre une sorte de périphérique USB. J'ai également trouvé camptocamp/Puppet-systemd qui semble gérer systemd lui-même. La documentation de Puppet sur fournisseur de services systemd sont assez peu détaillés.

Comment créer un service systemd à l'aide de Puppet ?

13voto

jsalonen Points 9651

Oui, vous devez créer un fichier d'unité. L'attribut de commande que vous avez spécifié ici n'est en fait pas un attribut valide pour la ressource de service

Il est préférable d'ajouter un Modèle ERB avec votre fichier d'unité, voici un exemple :

[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

Ensuite, configurez le modèle dans Puppet et assurez-vous de rafraîchir systemd. Quelques exemples de code :

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,
}

Maintenant que c'est fait, vous pouvez démarrer le service comme d'habitude :

service { 'myservice':
  ensure   => running,
  enable   => true,
  provider => provider,
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X