通过Bundler使用Ubuntu的Systemd进行Rake Task,退出状态127

时间:2018-08-02 08:28:19

标签: ruby ubuntu bundler sidekiq systemd

我正在Ubuntu 18.04服务器上设置我的项目,该项目使用的是ruby的rake任务(无Rails),这些任务本应是后台作业。我想编写一个systemd脚本来启动我的rake任务(该任务将启动sidekiq worker的实例)。

/lib/systemd/system/sidekiq_scheduler.service

[Unit]
Description=sidekiq_scheduler
After=syslog.target network.target
[Service]
Type=simple
WorkingDirectory=/home/deploy/trawler
ExecStart=/home/deploy/.rvm/rubies/ruby-2.4.1/bin/bundle exec rake workers:scheduler
User=deploy
Group=deploy
UMask=0002

Environment=MALLOC_ARENA_MAX=2

RestartSec=1
Restart=on-failure

StandardOutput=syslog
StandardError=syslog

SyslogIdentifier=sidekiq

[Install]
WantedBy=multi-user.target

在调用systemctl enable和start之后,该服务无法正常运行。 systemctl状态输出如下所示。

● sidekiq_scheduler.service - sidekiq_scheduler
   Loaded: loaded (/lib/systemd/system/sidekiq_scheduler.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2018-08-02 08:09:24 UTC; 4min 26s ago
  Process: 27376 ExecStart=/home/deploy/.rvm/rubies/ruby-2.4.1/bin/bundle exec rake workers:scheduler (code=exited, status=127)
 Main PID: 27376 (code=exited, status=127)
Aug 02 08:09:22 solaris-hive systemd[1]: sidekiq_scheduler.service: Main process exited, code=exited, status=127/n/a
Aug 02 08:09:22 solaris-hive systemd[1]: sidekiq_scheduler.service: Failed with result 'exit-code'.
Aug 02 08:09:24 solaris-hive systemd[1]: sidekiq_scheduler.service: Service hold-off time over, scheduling restart.
Aug 02 08:09:24 solaris-hive systemd[1]: sidekiq_scheduler.service: Scheduled restart job, restart counter is at 5.
Aug 02 08:09:24 solaris-hive systemd[1]: Stopped sidekiq_scheduler.
Aug 02 08:09:24 solaris-hive systemd[1]: sidekiq_scheduler.service: Start request repeated too quickly.
Aug 02 08:09:24 solaris-hive systemd[1]: sidekiq_scheduler.service: Failed with result 'exit-code'.
Aug 02 08:09:24 solaris-hive systemd[1]: Failed to start sidekiq_scheduler.

当我手动cd进入“ / home / deploy / trawler”(服务文件中的工作目录)并手动运行Execstart命令时(/home/deploy/.rvm/rubies/ruby-2.4.1/bin/捆绑执行耙工:调度程序)我没有问题。

我已经研究了其他解决方案,但据我所知它们似乎并不适用。 Bundle exec应该是可执行文件,并且可以独立工作。我还读到该程序可能已经完成,而systemd退出了。我不知道为什么会发生这种情况,因为直接加载的sidekiq工作者可以正常工作,并保持应有的开放式作业。

编辑

为了澄清。我的问题是为什么系统化作业具有退出代码127?如果该术语不太正确,我深表歉意,但是我希望Sidekiq的工作可以无限期地进行,而且似乎没有这样做。我已经尝试了一些新事物,例如编写脚本:

/home/deploy/bin/scheduler.sh

cd /home/deploy/trawler
rake workers:scheduler

并更新以下内容(文件的其余部分不变):

/lib/systemd/system/sidekiq_scheduler.service(已更新)

ExecStart=/bin/bash /home/deploy/bin/scheduler.sh

这导致了完全相同的问题。我可以像在ExecStart命令中一样手动执行脚本,但是它似乎在systemd服务中不起作用。我是否误解了退出代码:“主进程已退出,代码=已退出,状态= 127 / n / a”?为什么rake任务无限期运行,而systemd服务几乎立即退出?

0 个答案:

没有答案