使用Supervisord运行PostgreSQL
我想在Ubuntu 10.04上使用Supervisor运行PostgreSQL 9.1.目前,我使用init脚本手动启动PostgreSQL:
/etc/init.d/postgresql start 根据这篇文章:http://nicksergeant.com/using-postgresql-with-supervisor-on-ubuntu-1010/,我需要修改PostgreSQL配置,使其在TCP端口而不是Unix套接字上运行,以使PostgreSQL与Supervisor一起工作. 关于这种方法,我有两个问题: >考虑到这更像是黑客,是否有任何暗示(例如安全/权限,性能等)这样做? 更新: 感谢下面两个答案的有用建议,我已经为Supervisor设置了一个脚本来直接调用PostgreSQL: #!/bin/sh # This script is run by Supervisor to start PostgreSQL 9.1 in foreground mode if [ -d /var/run/postgresql ]; then chmod 2775 /var/run/postgresql else install -d -m 2775 -o postgres -g postgres /var/run/postgresql fi exec su postgres -c "/usr/lib/postgresql/9.1/bin/postgres -D /var/lib/postgresql/9.1/main -c config_file=/etc/postgresql/9.1/main/postgresql.conf" 我还将config:/etc/postgresql/9.1/main/start.conf设置为手动,以便PostgreSQL在启动时不会自动启动(但是,我不清楚是否加载了此配置).然后我为postgres设置Supervisor配置为: [program:postgres] user=root group=root command=/usr/local/bin/run_postgresql.sh autostart=true autorestart=true stderr_logfile=/home/www-data/logs/postgres_err.log stdout_logfile=/home/www-data/logs/postgres_out.log redirect_stderr=true stopsignal=QUIT 所以现在,我可以通过启动postgres在supervisorctl中启动PostgreSQL,它运行良好.然而,在我发出stop postgres之后,虽然supervisorctl声明postgres已停止,但服务器显然仍在运行,因为我可以将psql插入其中. 我想知道这是Supervisor配置问题还是PostgreSQL问题.欢迎任何建议! 解决方法
博客文章写得很糟糕.没有“TCP模式”:帖子建议的方法仍然会在Unix套接字上监听,只是在不同的目录中.帖子中的评论如“外部pid文件 – TCP模式不需要”是非常误导的.
postmaster是postgresql可执行文件的传统名称(用于区分主调度进程与后端从属进程).一段时间以来,没有单独的可执行文件,现在它被安装为简单的“postgres”. 假设Supervisor与qmail / daemontools监督方案大体相似,那么让它运行一个设置目录和环境的脚本完全可能(实际上很正常),然后用必要的参数执行postgres(或者传播给包装器脚本的参数,这对于监督来说是不寻常的,但是当你有一个配置文件来放入参数时会更有意义. 监督工作的方式(我将继续假设“监督者”是相同的)是让监督程序进程按指定运行子进程,并且只是在退出时重新启动新的子进程.这是基于这样的想法:正在启动的进程是一个长期存在的守护程序进程,只有在出现严重错误时才会退出,并且只需重新启动它就是一个有效的修复程序.相比之下,初始脚本(如/etc/init.d)运行子进程并将其分离,并将控制权返回给调用者 – 如果子进程退出,则不会发生任何特殊情况,必须手动重新启动.如果你试图简单地从监督运行/etc/init.d/postgresql,那么它将继续产生postgresql守护进程,因为init脚本的返回将被解释为退出的守护程序进程,而实际上它已经启动和分离. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |