使用systemd启动时,Sidekiq服务器不处理预定作业

时间:2016-10-03 09:08:21

标签: jruby sidekiq systemd cuba

我有一个古巴应用程序,我想使用sidekiq。

这就是我设置config.ru的方式:

require './app'
require 'sidekiq'
require 'sidekiq/web'

environment = ENV['RACK_ENV'] || "development"
config_vars = YAML.load_file("./config.yml")[environment]

Sidekiq.configure_client do |config|
  config.redis = { :url => config_vars["redis_uri"] }
end

Sidekiq.configure_server do |config|
  config.redis = { url: config_vars["redis_uri"] }
  config.average_scheduled_poll_interval = 5
end

# run Cuba
run Rack::URLMap.new('/' => Cuba, '/sidekiq' => Sidekiq::Web)

我使用systemd启动了sidekiq。这是我在sidekiq网站上的sidekiq.service改编的systemd脚本。:

#
# systemd unit file for CentOS 7, Ubuntu 15.04
#
# Customize this file based on your bundler location, app directory, etc.
# Put this in /usr/lib/systemd/system (CentOS) or /lib/systemd/system (Ubuntu).
# Run:
#   - systemctl enable sidekiq
#   - systemctl {start,stop,restart} sidekiq
#
# This file corresponds to a single Sidekiq process.  Add multiple copies
# to run multiple processes (sidekiq-1, sidekiq-2, etc).
#
# See Inspeqtor's Systemd wiki page for more detail about Systemd:
# https://github.com/mperham/inspeqtor/wiki/Systemd
#
[Unit]
Description=sidekiq
# start us only once the network and logging subsystems are available,
# consider adding redis-server.service if Redis is local and systemd-managed.
After=syslog.target network.target

# See these pages for lots of options:
# http://0pointer.de/public/systemd-man/systemd.service.html
# http://0pointer.de/public/systemd-man/systemd.exec.html
[Service]
Type=simple
Environment=RACK_ENV=development
WorkingDirectory=/media/temp/bandmanage/repos/fall_prediction_verification
# If you use rbenv:
#ExecStart=/bin/bash -lc 'pwd && bundle exec sidekiq -e production'
ExecStart=/home/froy001/.rvm/wrappers/fall_prediction/bundle exec "sidekiq -r app.rb -L log/sidekiq.log -e development"
# If you use the system's ruby:
#ExecStart=/usr/local/bin/bundle exec sidekiq -e production
User=root
Group=root
UMask=0002

# if we crash, restart
RestartSec=1
Restart=on-failure

# output goes to /var/log/syslog
StandardOutput=syslog
StandardError=syslog

# This will default to "bundler" if we don't specify it
SyslogIdentifier=sidekiq

[Install]
WantedBy=multi-user.target

调用worker的代码是:

 raw_msg = JSON.parse(req.body.read, {:symbolize_names => true})
          if raw_msg
            ts = raw_msg[:ts]
            waiting_period = (1000*60*3) # wait 3 min before checking
            perform_at_time = Time.at((ts + waiting_period)/1000).utc

            FallVerificationWorker.perform_at((0.5).minute.from_now, raw_msg)

            my_res = { result: "success", status: 200}.to_json
            res.status = 200
            res.write my_res
          else
            my_res = { result: "not found", status: 404}.to_json
            res.status = 404
            res.write my_res
          end

我只使用默认的q。

我的问题是该作业根本没有被处理。

1 个答案:

答案 0 :(得分:4)

运行systemctl enable sidekiq以便它在启动时启动并systemctl start sidekiq以便立即启动,然后您应该查看一些日志,这些日志将提供有关任何启动失败的详细信息:

 sudo journalctl -u sidekiq

查看日志,查看systemd文档并根据需要调整单元文件。您可以使用apropos systemd找到所有已安装的systemd文档。要审核的一些最有用的手册页是systemd.servicesystemd.execsystemd.unit