我正在设置一个 Debian Etch 服务器来使用 nginx 托管 ruby 和 php 应用程序。我已成功配置 inittab 以在启动时使用 respawn 操作启动 php-cgi 进程。在服务 1000 个请求后,php-cgi 工作进程死亡并由 init 重新生成。inittab 记录如下所示:
50:23:respawn:/usr/local/bin/spawn-fcgi -n -a 127.0.0.1 -p 8000 -C 3 -u someuser -- /usr/bin/php-cgi
我最初将进程条目(第三个冒号之后的所有内容)写在一个单独的脚本中(只是因为它很长)并将该脚本名称放在 inittab 记录中,但由于脚本将运行它的单行并死掉,系统日志被填充有这样的错误:
May 7 20:20:50 sb init: Id "50" respawning too fast: disabled for 5 minutes
因此,我摆脱了脚本文件,只是将整行放在 inittab 中。从此以后,系统日志中不会出现任何错误。
现在我正在尝试使用Thin来服务 Rails 应用程序。我可以通过运行以下命令成功启动瘦服务器:
sudo thin -a 127.0.0.1 -e production -l /var/log/thin/thin.log -P /var/run/thin/thin.pid -c /path/to/rails/app -p 8010 -u someuser -g somegroup -s 2 -d start
无论我是否使用 -d (守护进程)标志,它的工作原理显然完全相同。无论哪种方式,命令行控制都会立即返回(进程已被守护)。如果我将整个命令(减去 sudo 和绝对路径)放入 inittab,init 会抱怨(在 syslog 中)进程条目太长,因此我将选项放入 /etc/profile 中的导出环境变量中。现在我可以通过以下方式成功启动服务器:
sudo thin $THIN_OPTIONS start
但是当我用 respawn 动作把它放在一个 inittab 记录中时
51:23:respawn:/usr/local/bin/thin $THIN_OPTIONS start
日志清楚地表明环境变量对 init 不可见;就好像该命令只是“薄启动”。
如何缩短 inittab 进程条目? 除了 /etc/profile 之外,还有其他文件可以设置 THIN_OPTIONS 环境变量吗?我早期使用 php-cgi 的经验告诉我,我不能将整个命令放在单独的脚本中。