我需要在服务器启动时启动一些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并稍后担心它的依赖关系。
答案 0 :(得分:2)
首先,我不是直接调用rake,而是调用/ path / to / ruby / bin / bundle exec rake my:raketask。
其次,我认为你应该真正看一下foreman gem,因为它设计用于处理这种情况,尽管你可能需要使用systemd来适应它。
一种方法是从systemd init文件调用foreman,传递选项以在应用程序目录中指定Procfile(foreman配置文件)。
Foreman已经可以将其配置导出为多种格式,但我不认为你的配置是其中之一。但, 您可以创建一个自定义导出器,将foreman配置导出为systemd格式。有关详细信息,请参阅https://github.com/ddollar/foreman/wiki/Custom-exporters。如果你走这条路,考虑让你的出口商回到工头项目。
答案 1 :(得分:2)
要使systemd注意到新添加的服务,我必须插入以下命令:
systemctl daemon-reload
答案 2 :(得分:1)
通常,如果您需要在应用程序初始化程序中启动某些内容,可以将.rb
文件放到
config/initializers/
文件夹
您是否会详细说明您的要求,因为可能还有其他一些方法可以做到这一点? :)