Cron 不会 运行 Rails Puma 服务器在 Ubuntu 中自动
Cron doesn't run Rails Puma server automatically in Ubuntu
我使用 Capistrano 在 Digital Ocean Ubuntu 服务器中部署了一个 Rails 应用程序。由于某种原因,puma 服务器突然停止。不知道是什么原因。
这就是我创建脚本的原因 /home/deploy/startup-script.sh
该脚本包含在守护程序
中启动 Rails 应用程序的命令
#!/bin/bash
echo "Running Puma Server"
touch hello.txt
cd /srv/www/apps/app/current
bundle exec puma -C /srv/www/apps/app/shared/puma.rb --daemon
然后我 运行 这个脚本每分钟都使用 Cron。
我的 crontab -e 包含
* * * * * ./startup-script.sh
1 分钟后,我注意到它创建了一个 hello.txt 文件,但我的 Puma 服务器未 运行ning。
但是当我 运行 它手动使用 ./startup-script.sh
它会 运行 服务器。
puma_error.log
Puma starting in single mode...
* Version 4.3.1 (ruby 2.6.0-p0), codename: Mysterious Traveller
* Min threads: 0, max threads: 8
* Environment: production
* Daemonizing...
=== puma startup: 2020-09-21 05:16:28 +0000 ===
=== puma startup: 2020-09-21 05:17:39 +0000 ===
* Listening on tcp://0.0.0.0:9292
=== puma startup: 2020-09-21 06:11:35 +0000 ===
- Gracefully stopping, waiting for requests to finish
=== puma shutdown: 2020-09-21 06:11:35 +0000 ===
production.log
Item Load (0.3ms) SELECT "items".* FROM "items" WHERE "items"."id" = LIMIT [["id", 208], ["LIMIT", 1]]
CACHE Unit Load (0.0ms) SELECT "units".* FROM "units" WHERE "units"."id" = LIMIT [["id", 4], ["LIMIT", 1]]
Item Load (0.3ms) SELECT "items".* FROM "items" WHERE "items"."id" = LIMIT [["id", 215], ["LIMIT", 1]]
CACHE Unit Load (0.0ms) SELECT "units".* FROM "units" WHERE "units"."id" = LIMIT [["id", 4], ["LIMIT", 1]]
Item Load (0.2ms) SELECT "items".* FROM "items" WHERE "items"."id" = LIMIT [["id", 198], ["LIMIT", 1]]
CACHE Unit Load (0.0ms) SELECT "units".* FROM "units" WHERE "units"."id" = LIMIT [["id", 10], ["LIMIT", 1]]
Rendering text template
Rendered text template (0.0ms)
Sent data Delivery Receipt 12-2020-001.pdf (0.5ms)
Completed 200 OK in 4326ms (Views: 0.3ms | ActiveRecord: 37.4ms)
puma_access.log
=== puma startup: 2020-12-01 01:07:13 +0000 ===
启动 startup-script.sh
脚本时,我得到了这个
Running Puma Server
Puma starting in single mode...
* Version 4.3.1 (ruby 2.6.0-p0), codename: Mysterious Traveller
* Min threads: 0, max threads: 8
* Environment: production
* Daemonizing...
我的 droplet 仍然是 运行ning,但是 9292 端口上的 puma 运行ning 在崩溃时消失了,所以我怀疑这是 puma 错误。
我认为 puma 不会自己停下来。也许它不 运行 作为守护进程?我建议弄清楚发生了什么。
也就是说,为了确保某个守护进程始终处于运行状态并且 运行 你应该使用像 supervisord 这样的工具:http://supervisord.org/
cronjob 不是正确的工具。
根据您的 Puma 版本,--daemon
选项可能已弃用。使用 &
代替:
bundle exec puma -C /srv/www/apps/app/shared/puma.rb &
但是,您的问题不在于 Cron 或 Puma。除非发生其他事情,否则 Puma 不会自行退出。我建议您查看错误日志并找出真正的问题。
编辑:
回答您的评论:
我建议您将 Puma 更新到最新的 4.x 版本(当前为 4.3.6)。如果您可以切换到 Puma 5.x(当前为 5.1),那就更好了。一直都有错误修复和改进。也许您的问题与已解决的错误有关。
如果更新到 5.x 版本系列,则需要将 --daemon
替换为上面提到的 &
。
旁注:
但是,我仍然相信有一个错误报告,您没有注意到您的工具集未能记录。
我不知道你是否查看了 Capistrano logs 以及 Rails / Puma 日志和 DigitalOcean 服务器日志。
如果您是 运行 Puma 和 --debug
,一些 Puma 消息必须出现在日志中。
我使用 Capistrano 在 Digital Ocean Ubuntu 服务器中部署了一个 Rails 应用程序。由于某种原因,puma 服务器突然停止。不知道是什么原因。
这就是我创建脚本的原因 /home/deploy/startup-script.sh 该脚本包含在守护程序
中启动 Rails 应用程序的命令#!/bin/bash
echo "Running Puma Server"
touch hello.txt
cd /srv/www/apps/app/current
bundle exec puma -C /srv/www/apps/app/shared/puma.rb --daemon
然后我 运行 这个脚本每分钟都使用 Cron。 我的 crontab -e 包含
* * * * * ./startup-script.sh
1 分钟后,我注意到它创建了一个 hello.txt 文件,但我的 Puma 服务器未 运行ning。
但是当我 运行 它手动使用 ./startup-script.sh
它会 运行 服务器。
puma_error.log
Puma starting in single mode...
* Version 4.3.1 (ruby 2.6.0-p0), codename: Mysterious Traveller
* Min threads: 0, max threads: 8
* Environment: production
* Daemonizing...
=== puma startup: 2020-09-21 05:16:28 +0000 ===
=== puma startup: 2020-09-21 05:17:39 +0000 ===
* Listening on tcp://0.0.0.0:9292
=== puma startup: 2020-09-21 06:11:35 +0000 ===
- Gracefully stopping, waiting for requests to finish
=== puma shutdown: 2020-09-21 06:11:35 +0000 ===
production.log
Item Load (0.3ms) SELECT "items".* FROM "items" WHERE "items"."id" = LIMIT [["id", 208], ["LIMIT", 1]]
CACHE Unit Load (0.0ms) SELECT "units".* FROM "units" WHERE "units"."id" = LIMIT [["id", 4], ["LIMIT", 1]]
Item Load (0.3ms) SELECT "items".* FROM "items" WHERE "items"."id" = LIMIT [["id", 215], ["LIMIT", 1]]
CACHE Unit Load (0.0ms) SELECT "units".* FROM "units" WHERE "units"."id" = LIMIT [["id", 4], ["LIMIT", 1]]
Item Load (0.2ms) SELECT "items".* FROM "items" WHERE "items"."id" = LIMIT [["id", 198], ["LIMIT", 1]]
CACHE Unit Load (0.0ms) SELECT "units".* FROM "units" WHERE "units"."id" = LIMIT [["id", 10], ["LIMIT", 1]]
Rendering text template
Rendered text template (0.0ms)
Sent data Delivery Receipt 12-2020-001.pdf (0.5ms)
Completed 200 OK in 4326ms (Views: 0.3ms | ActiveRecord: 37.4ms)
puma_access.log
=== puma startup: 2020-12-01 01:07:13 +0000 ===
启动 startup-script.sh
脚本时,我得到了这个
Running Puma Server
Puma starting in single mode...
* Version 4.3.1 (ruby 2.6.0-p0), codename: Mysterious Traveller
* Min threads: 0, max threads: 8
* Environment: production
* Daemonizing...
我的 droplet 仍然是 运行ning,但是 9292 端口上的 puma 运行ning 在崩溃时消失了,所以我怀疑这是 puma 错误。
我认为 puma 不会自己停下来。也许它不 运行 作为守护进程?我建议弄清楚发生了什么。
也就是说,为了确保某个守护进程始终处于运行状态并且 运行 你应该使用像 supervisord 这样的工具:http://supervisord.org/
cronjob 不是正确的工具。
根据您的 Puma 版本,--daemon
选项可能已弃用。使用 &
代替:
bundle exec puma -C /srv/www/apps/app/shared/puma.rb &
但是,您的问题不在于 Cron 或 Puma。除非发生其他事情,否则 Puma 不会自行退出。我建议您查看错误日志并找出真正的问题。
编辑:
回答您的评论:
我建议您将 Puma 更新到最新的 4.x 版本(当前为 4.3.6)。如果您可以切换到 Puma 5.x(当前为 5.1),那就更好了。一直都有错误修复和改进。也许您的问题与已解决的错误有关。
如果更新到 5.x 版本系列,则需要将
--daemon
替换为上面提到的&
。
旁注:
但是,我仍然相信有一个错误报告,您没有注意到您的工具集未能记录。
我不知道你是否查看了 Capistrano logs 以及 Rails / Puma 日志和 DigitalOcean 服务器日志。
如果您是 运行 Puma 和 --debug
,一些 Puma 消息必须出现在日志中。