我期望以下实际开始我的服务:
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', }
我知道并承诺开始命令是不正确的,但我不知道如何启动实际的Ruby Sinatra应用程序。 我其实是期待这样的工作:
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', }
有点像cron。 我习惯了daemontools,而systemd的模型完全不同。 我必须自己创build单元文件吗? 并链接单元文件?
我发现如何使用puppet启用systemd实例化服务? 启动某种USB设备。 我也发现了camptocamp / puppet-systemd ,它似乎是在pipe理systemd本身。 傀儡系统服务提供商的文档相当稀疏的细节。
如何使用Puppet创build一个systemd服务?
是的,你需要创build一个单元文件。 您在那里指定的命令属性实际上并不是服务资源的有效属性
您最好使用单元文件添加一个ERB模板 ,下面是一个例子:
[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
然后,在Puppet中设置模板,并确保刷新systemd。 一些示例代码:
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, }
现在完成了,您可以像平常一样启动服务:
service { 'myservice': ensure => running, enable => true, provider => provider, }