【发布时间】:2022-04-29 05:27:40
【问题描述】:
我正在连接到 SQS 的 Amazon Linux 2 工作器实例上运行 Node.js 应用程序。
问题
一切运行良好,除了出于技术原因我需要定期重新启动服务器。为此,我设置了一个 cron 在夜间运行 /sbin/shutdown -r now。
当实例启动备份时,我收到有关 SQS 守护程序服务的错误:
[INFO] Executing instruction: configureSqsd
[INFO] get sqsd conf from cfn metadata and write into sqsd conf file ...
[INFO] Executing instruction: startSqsd
[INFO] Running command /bin/sh -c systemctl show -p PartOf sqsd.service
[INFO] Running command /bin/sh -c systemctl is-active sqsd.service
[INFO] Running command /bin/sh -c systemctl start sqsd.service
[ERROR] An error occurred during execution of command [self-startup] - [startSqsd].
Stop running the command. Error: startProcess Failure: starting process "sqsd" failed:
Command /bin/sh -c systemctl start sqsd.service failed with error exit status 1.
Stderr:Job for sqsd.service failed because the control process exited with error code.
See "systemctl status sqsd.service" and "journalctl -xe" for details.
然后实例卡在初始化运行的循环中,直到遇到 sqsd.service 错误,然后重新开始。
日志
systemctl status sqsd.service 命令似乎没有显示比我们已经获得的更多信息,只是它以状态 1 退出:
● sqsd.service - This is sqsd daemon
Loaded: loaded (/etc/systemd/system/sqsd.service; enabled; vendor preset: disabled)
Active: deactivating (stop-sigterm) (Result: exit-code)
Process: 2748 ExecStopPost=/bin/sh -c (code=exited, status=0/SUCCESS)
Process: 2745 ExecStopPost=/bin/sh -c rm -f /var/pids/sqsd.pid (code=exited, status=0/SUCCESS)
Process: 2753 ExecStart=/bin/sh -c /opt/elasticbeanstalk/lib/ruby/bin/aws-sqsd start (code=exited, status=1/FAILURE)
CGroup: /system.slice/sqsd.service
└─2789 /opt/elasticbeanstalk/lib/ruby/bin/ruby /opt/elasticbeanstalk/lib/ruby/bin/aws-sqsd start
检查journalctl -xe时发现的最有趣的是:
sqsd[9704]: /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.6.0/gems/aws-sqsd-3.0.3/bin/aws-sqsd:58:in `initialize': No such file or directory @ rb_sysopen - /var/run/aws-sqsd/default.pid (Errno::ENOENT)
sqsd[9704]: from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.6.0/gems/aws-sqsd-3.0.3/bin/aws-sqsd:58:in `open'
sqsd[9704]: from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.6.0/gems/aws-sqsd-3.0.3/bin/aws-sqsd:58:in `start'
sqsd[9704]: from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.6.0/gems/aws-sqsd-3.0.3/bin/aws-sqsd:83:in `launch'
sqsd[9704]: from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.6.0/gems/aws-sqsd-3.0.3/bin/aws-sqsd:111:in `<top (required)>'
sqsd[9704]: from /opt/elasticbeanstalk/lib/ruby/bin/aws-sqsd:23:in `load'
sqsd[9704]: from /opt/elasticbeanstalk/lib/ruby/bin/aws-sqsd:23:in `<main>'
systemd[1]: sqsd.service: control process exited, code=exited status=1
systemd[1]: Failed to start This is sqsd daemon.
进一步调查
根据日志,重新启动服务器时文件/var/run/aws-sqsd/default.pid 不存在。它确实存在于重建并包含应用程序进程 ID。
如果我添加文件,设置过程会更进一步,直到丢失类似的文件。
解决方案?
以前有人遇到过这个问题吗?不知道为什么在正常重启后启动 sqsd.service 会失败,但在初始部署和重建环境后工作正常......它似乎正在寻找一个不存在的配置文件......
还有其他方法可以安全重启我应该尝试的实例吗?
【问题讨论】:
-
我今天在重新启动后遇到了这个问题,唯一解决它的是终止实例(并让 Beanstalk 自动启动替换)。感觉它不会比重新启动花费更长的时间。不作为答案发布为重启/终止不是一个长期的解决方案 imo。
标签: amazon-web-services amazon-elastic-beanstalk amazon-sqs amazon-linux-2