3

我有几个 Rails rake 任务需要在服务器启动时启动。我一直在寻找使用 systemd 让它们作为传统服务运行。服务文件是在下面创建的,/etc/system/systemd但不幸的是,systemd 似乎没有找到该文件:

#systemctl start screens.service
Failed to issue method call: Unit screens.service failed to load: No such file or directory. See system logs and 'systemctl status screens.service' for details.

#systemctl status screens.service
screens.service
      Loaded: error
      Active: inactive (dead)

我目前正在使用 Fedora 15

如何使我的 systemd 服务正常工作?有没有另一种方法可以让我的 rake 任务在系统启动时运行。

更新: screens.service 文件内容

[Unit]
Description=Send Reminders

[Service]
Type=simple
User=myuser
WorkingDirectory=/path/to/rails/app
ExecStart=/usr/local/rvm/gems/ruby-1.9.3-p194/bin/rake reminders:send

我知道当我需要它在启动时工作时我需要设置依赖项,但目前我正在尝试使用 systemctl 命令启动我的 rake 并稍后担心它的依赖项。

4

3 回答 3

2

为了让 systemd 注意到新添加的服务,我必须插入以下命令:

systemctl daemon-reload
于 2013-04-24T04:12:50.273 回答
2

首先,我不会直接调用 rake,而是调用 /path/to/ruby/bin/bundle exec rake my:raketask。

其次,我认为您真的应该看看 foreman gem,因为它旨在处理这种情况,尽管您可能必须使其与 systemd 一起使用。

一种方法是从 systemd 初始化文件调用工头,并传递选项以指定应用程序目录中的 Procfile(工头配置文件)。

Foreman 已经可以将其配置导出为多种格式,但我认为您的不在其中。但是,您可以创建一个自定义导出器,将工头配置导出为 systemd 格式。有关更多信息,请参阅https://github.com/ddollar/foreman/wiki/Custom-exporters。如果您走这条路,请考虑将您的出口商贡献回工头项目。

于 2013-04-23T14:33:14.787 回答
1

通常,如果您需要在应用程序初始化程序中启动某些内容,您可以将.rb文件放到

config/initializers/文件夹

您能否详细说明您的要求,因为可能还有其他方法可以做到这一点?:)

于 2013-04-23T11:44:59.577 回答