木偶生成系统单元文件?

我期望以下实际开始我的服务:

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