Puppet 生成了 systemd 单元文件?

Puppet 生成了 systemd 单元文件?

我期望以下内容能够真正启动我的服务:

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

相关内容