我正在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服务几乎立即退出?