在Ubuntu上将Sidekiq作为守护进程运行

21

我该如何在Ubuntu上将sidekiq作为守护进程运行?

如果我运行bundle exec sidekiq -D,我会得到invalid option: -D错误提示,有没有其他方式可以运行它而不需要使用god、upstart等控制器?

4个回答

29

有一个选项可以使Sidekiq进程变为守护进程,只需传递-d选项即可。

提交记录


在 examples/upstart 目录下有一个 upstart 脚本,你应该使用它。使用 upstart 你将获得 respawning 和开机启动两个非常有用的属性。 - dkam
17
使用 -d 选项需要通过 -L 选项指定日志文件。之所以分享这个信息是因为我尝试将其转化为守护进程时遇到了错误。 - axil
4
谢谢您的留言。作为另一个数据点,我发现只要在sidekiq.yml中声明了logfile,就不需要使用-L参数。 - mahemoff
似乎对于 jruby 不起作用: ObjectSpace 被禁用; each_object 只会与 Class 一起工作, 请传递 -X+O 以启用 - RAJ
@mahemoff 我没有 sidekiq.yml 文件。 - user1735921
2
嘿,如何停止妖魔化? - user1735921

8

从Sidekiq 6.0开始,守护进程模式将无法正常工作。如果您传递-d参数,会收到以下提示:

在Sidekiq 6.0中已删除守护进程模式,请使用正确的进程监管器来启动和管理您的服务

请查看此问题 #4045


6
以守护进程方式运行不会在 sidekiq 意外崩溃时重新启动。另一种选择是将 sidekiq 作为服务运行(使用 upstart job)。如果系统重新启动,则 upstart job 也会运行 sidekiq。这里 提供了完整的脚本和运行 sidekiq 作为服务的方法。
在将 sidekiq 作为服务运行后,您可以通过命令 sudo service sidekiq start/stop/restart 简单地启动/停止/重新启动 sidekiq。

1

对于Sidekiq 6或更高版本,不支持将程序作为Unix运行,需要将进程作为服务运行。

根据您的bundler位置编写脚本,或者您可以修改下面的代码片段,并将其复制到/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中提供了正确的bundler路径以启动进程。将其保存为sidekiq.service并运行systemctl enable sidekiq。然后,我们可以使用命令systemctl start sidekiqsystemctl stop sidekiqsystemctl restart sidekiq来管理该进程。
我们可以使用journalctl -u sidekiq -rn 100查看日志的最后100行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接