我期望以下内容能够真正启动我的服务:
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 的模型完全不同。我必须自己创建单元文件吗?并链接单元文件?
我发现如何使用 puppet 启用 systemd 实例服务?启动某种 USB 设备。我还发现camptocamp/puppet-systemd它似乎管理 systemd 本身。Puppet 的文档systemd 服务提供商细节相当稀少。
如何使用 Puppet 创建 systemd 服务?
答案1
是的,您需要创建一个单元文件。您在此处指定的命令属性实际上并不是有效属性对于服务资源
你最好添加一个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,
}