我希望以下内容能够真正启动我的服务:
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',
}
Run Code Online (Sandbox Code Playgroud)
我知道并理解 start 命令不正确,但我不知道如何启动实际的 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',
}
Run Code Online (Sandbox Code Playgroud)
有点像cron。我习惯了daemontools,systemd的模型完全不同。我必须自己创建单元文件吗?并链接单元文件?
我找到了如何使用 puppet 启用 systemd 实例化服务?它启动某种 USB 设备。我还发现了似乎管理 systemd 本身的camptocamp/puppet-systemd。Puppet 关于systemd 服务提供商的文档在细节上相当稀少。
如何使用 Puppet 创建一个 systemd 服务?
小智 12
是的,您需要创建一个单元文件。您在那里指定的命令属性实际上不是服务资源的有效属性
你最好在你的单元文件中添加一个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
Run Code Online (Sandbox Code Playgroud)
然后,在 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,
}
Run Code Online (Sandbox Code Playgroud)
现在完成了,您可以正常启动服务:
service { 'myservice':
ensure => running,
enable => true,
provider => provider,
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11798 次 |
最近记录: |