Sidekiq 6仅在进入Web控制台或执行ps命令时才轮询问题求助
问题根因
你遇到的是Ubuntu 20.04系统下systemd用户模式的默认行为导致的问题:默认情况下用户退出所有登录会话后,systemd会暂停该用户的所有服务进程进入休眠状态,直到用户再次登录或者有用户相关的进程被触发唤醒。你访问Sidekiq web控制台、执行ps命令都会触发用户进程唤醒,所以Sidekiq会恢复运行。
排查步骤
- 先确认systemd用户模式的linger配置,执行命令:
loginctl show-user <替换为你的服务器用户名> | grep Linger
如果输出为Linger=no,即可确认是该配置导致的问题。 - 当Sidekiq停止轮询时,不要执行触发恢复的操作,直接执行
systemctl --user status sidekiq查看服务状态,确认服务显示active (running)但无任务处理日志。 - 查看系统日志确认Sidekiq无崩溃、OOM类错误:
grep sidekiq /var/log/syslog
解决方案
1. 开启systemd用户linger
执行以下命令开启指定用户的linger,让用户的systemd实例在用户退出登录后依然保持正常运行:
loginctl enable-linger <替换为你的服务器用户名>
执行后验证配置生效:loginctl show-user <替换为你的服务器用户名> | grep Linger,输出为Linger=yes即可。
2. 调整Sidekiq的systemd配置
在你现有的~/.config/systemd/user/sidekiq.service的[Service]段新增NotifyAccess=all配置,避免systemd误判Sidekiq的上报状态:
[Service] # 原有配置全部保留,新增以下行 NotifyAccess=all
修改后执行命令让配置生效:
systemctl --user daemon-reload systemctl --user restart sidekiq
3. 验证修复效果
退出所有SSH登录会话,等待10分钟以上后新增Sidekiq任务,确认不需要登录服务器或访问web控制台,Sidekiq也能正常处理任务即可。
内容的提问来源于stack exchange,提问作者kevinluo201
相关产品推荐
相关产品推荐

