如何在Ubuntu上运行sidekiq作为守护进程?
如果我运行bundle exec sidekiq -D
我得到invalid option: -D
,有没有办法在没有其他控制器的情况下运行它,比如上帝,新贵......?
答案 0 :(得分:28)
可以选择Daemonize sidekiq,只需传递-d
选项
答案 1 :(得分:6)
如果守护程序意外崩溃,则作为守护程序运行将不会重新启动sidekiq
。另一种方法是将sidekiq作为服务运行(新手工作)。如果重新启动系统,则upstart作业将运行sidekiq。
Here是将sidekiq作为服务运行的完整脚本和方法。
将sidekiq作为服务运行后,您可以通过命令start/stop/restart
简单地sudo service sidekiq start/stop/restart
sidekiq。
答案 2 :(得分:1)
从sidekiq 6.0开始,守护进程将无法正常工作,如果您通过-d,您将收到一条消息:
守护进程模式已在Sidekiq 6.0中删除,请使用适当的流程管理员来启动和管理您的服务
在此处#4045
检查问题答案 3 :(得分:1)
不支持将Sidekiq 6或更高版本作为后台程序运行为Unix的守护进程。相反,我们必须将流程作为服务运行。
根据您的捆绑器位置编写脚本,或者您可以修改以下代码段并将其复制到/usr/lib/systemd/system
(CentOS)或/lib/systemd/system
(Ubuntu)
[Unit]
Description=sidekiq
After=syslog.target network.target
[Service]
Type=notify
WatchdogSec=10
WorkingDirectory=/home/deploy/apps/project_name
# If you use rbenv:
# ExecStart=/bin/bash -lc 'exec /home/deploy/.rbenv/shims/bundle exec sidekiq -e production'
# If you use the system's ruby:
# ExecStart=/usr/local/bin/bundle exec sidekiq -e production
# If you use rvm in production, don't.
#ExecStart=/home/deploy/.rvm/wrappers/ruby-2.6.5/bundle exec sidekiq -e production
# Use `systemctl kill -s TSTP sidekiq` to quiet the Sidekiq process
# !!! Change this to your deploy user account !!!
User=deploy
Environment=MALLOC_ARENA_MAX=2
# if the script crash, restart
RestartSec=1
Restart=on-failure
# output goes to /var/log/syslog (Ubuntu) or /var/log/messages (CentOS)
StandardOutput=syslog
StandardError=syslog
# This will default to "bundler" if we don't specify it
SyslogIdentifier=sidekiq
[Install]
WantedBy=multi-user.target
请确保为ExecStart
提供了正确的捆绑程序路径,以便开始该过程。将其另存为sidekiq.service
并运行systemctl enable sidekiq
。然后,我们可以使用命令systemctl start sidekiq
,systemctl stop sidekiq
和systemctl restart sidekiq
管理该过程。
我们可以使用journalctl -u sidekiq -rn 100
查看日志的最后100行。