Process 如何缩短inittab进程条目,也称为,在哪里放置init将看到的环境变量?

Process 如何缩短inittab进程条目,也称为,在哪里放置init将看到的环境变量?,process,environment-variables,debian,sysadmin,Process,Environment Variables,Debian,Sysadmin,我正在设置一个Debian蚀刻服务器,用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 May 7 20:20

我正在设置一个Debian蚀刻服务器,用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
May  7 20:20:50 sb init: Id "50" respawning too fast: disabled for 5 minutes
我最初在一个单独的脚本中编写了进程条目(第三个冒号之后的所有内容)(仅仅因为它很长),并将该脚本名称放在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
May  7 20:20:50 sb init: Id "50" respawning too fast: disabled for 5 minutes
因此,我去掉了脚本文件,将整行内容放在inittab中。从此,系统日志中不再显示错误

现在,我正尝试用同样的方法为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(daemonize)标志,其工作原理显然完全相同。无论哪种方式,命令行控制都会立即返回(进程已被后台监控)。如果我将整个命令(减去sudo和绝对路径)放入inittab,init(在syslog中)会抱怨进程条目太长,因此我将选项放入/etc/profile中导出的环境变量中。现在,我可以通过以下方式成功启动服务器:

sudo thin $THIN_OPTIONS start
但当我把它放在inittab记录中,并使用respawn操作

51:23:respawn:/usr/local/bin/thin $THIN_OPTIONS start
日志清楚地表明环境变量对init不可见;这就好像命令只是“精简启动”


如何缩短inittab进程条目?除了/etc/profile,还有其他文件可以设置THIN\u OPTIONS环境变量吗?我以前使用php cgi的经验告诉我,我不能将整个命令放在一个单独的脚本中。

init.d脚本

在中使用脚本

/etc/rc.d/init.d
并设置运行级别

下面是一些使用瘦、ruby、apache的示例

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

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

edit2
似乎init将派生脚本。只要一个循环就可以了。

你为什么不给一个有你选择的瘦包装者打电话呢?

开始。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\u thin

谢谢——这个答案没有解决的一个问题是,如果精简服务器死机,它将重新启动。一个人必须登录并手动启动它,我们已经可以这样做了。据我所知,只有inittab允许自动重生。如果有人知道告诉init重新启动init.d脚本的方法,这也会解决我的问题。也许(对不起)在init脚本中插入一个循环,重复启动服务器,然后如果进程死亡,循环将重新启动,服务器将无限期地重新启动。在运行了几天之后,精简进程没有死亡。这让我相信thin的工作方式与(1)php cgi进程本身或(2)任何从spawn fcgi开始的工作方式(我不确定是哪一种)——本质上是在服务一定数量的请求后死亡。有了这些知识,我现在相信我不需要担心重生,尽管如果我确实需要确保thin重生的话,Aiden的回答会起到作用。我创建了一个非常简单的init.d脚本,它使用适当的参数简单地调用“瘦启动”或“瘦停止”。很好的东西!祝您一切顺利!