2013-04-23 151 views
2

我有几个rails rake任务需要在服务器启动时启动。我一直在寻找使他们作为使用systemd的传统服务运行。服务文件/etc/system/systemd下创建但不幸的是,它看起来像systemd没有找到文件:在服务器启动时启动ruby rake任务

#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命令来启动我的耙子,以后担心它的依赖关系。

+0

我们可以看看在'screens.service'文件? – marcosbeirigo 2013-04-23 11:42:18

+0

系统日志中是否有任何有关未找到的文件或目录的信息? – sockmonk 2013-04-23 14:34:27

回答

2

为了使新的增值服务,我不得不插入以下命令systemd留意了:

systemctl daemon-reload 
0

一般来说,如果你需要在应用程序初始化开始的东西,你可以把.RB文件

config/initializers/文件夹

BTW可以ü详细说明您的要求,怎么可能有这样的一些其他的方式相同:)

+0

我需要运行2个独立于我的应用程序的后台进程,类似于delayed_jobs'rake jobs:work' – wael34218 2013-04-23 11:52:30

2

首先,不要直接调用rake,而是调用/ path/to/ruby​​/bin/bundle exec rake my:raketask。第二,我认为你应该真正看看领班宝石,因为它是专门用来处理这种情况的,尽管你可能不得不适应它与systemd一起工作。

一种方法是从systemd init文件中调用foreman,并将其传递给应用程序目录中的Procfile(foreman config file)。

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

+0

我正在考虑让它与god(http://godrb.com/)一起工作,但是我必须做系统工作 – wael34218 2013-04-23 18:02:33