0

我正在设置一个 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 的经验告诉我,我不能将整个命令放在单独的脚本中。

4

2 回答 2

1

你为什么不打电话给一个从你的选择开始变薄的包装商呢?

start_thin.sh:
#!/bin/bash
/usr/local/bin/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

然后:
51:23:respawn:/usr/local/bin/start_thin

于 2009-05-19T13:37:24.980 回答
0

init.d 脚本

在中使用脚本

/etc/rc.d/init.d

并设置运行级别

下面是一些关于瘦、红宝石、阿帕奇的例子

http://articles.slicehost.com/2009/4/17/centos-apache-rails-and-thin

http://blog.fiveruns.com/2008/9/24/rails-automation-at-slicehost

http://elwoodicious.com/2008/07/15/nginx-haproxy-thin-fastcgi-php5-load-balanced-rails-with-php-support/

其中提供了要使用的示例初始化脚本。

编辑:Asker 指出这将不允许重生。我建议在 init 脚本中分叉并取消进程,以便 init 不会挂起(它可能会 fork() 脚本本身,将检查)。然后创建一个无限循环,等待服务器进程死亡并重新启动它。

edit2:似乎 init 会分叉脚本。只需一个循环即可。

于 2009-05-14T21:32:51.507 回答