我正试图想出一个不错的init。D脚本启动一个psgi应用程序,使用start_server和starman。它需要具有以下特性:
- 在RedHat上运行(即Debian的
start-stop-daemon
不可用) - 以其他用户运行
start_server
- 是可维护的。
理想情况下,我想使用的东西,/etc/init.d/functions
来给脚本的外观和感觉的任何老红帽init。d脚本。
更具体地说,我正在寻找最佳实践:
- 将没有自带
--daemonize
选项的程序作为守护进程 - 在其他UID下运行守护进程
你可以试试runit,它是另一个监控器。现在,使用这些东西似乎是一个很好的实践。这里你可以读到不同主管的比较。
最佳实践:
- 对没有自带的程序进行守护——Daemonize选项
你不需要守护程序,runit会照顾它。
- 在其他UID下运行守护进程
这里可以使用chpst
如果perl正在运行,如何使用Ubic ?它是一个基于perl的管理器,使LSB/etc/init.D/兼容性相当容易。我倾向于像使用runit/daemontools/s6那样使用它(在单独的服务/目录中),但您有很大的灵活性。由于您可以在脚本中使用perl,因此有许多有趣的可能性。此外,Ubic还为您提供了可移植性,因为它可以在不同的平台(BSD, Linux, Solaris, OS/X等)上以相同的方式工作。
下面是我们使用的初始化脚本:starman-init
它具有您提到的所有功能:
- 使用start_server支持安全重启
- 以无特权用户/组nobody/nobody运行 使用/etc/init.d/functions
注意,它假设您已经为您的应用程序安装了一个本地Perl(例如plenv或perlbrew)。您需要根据您的环境自定义它。