MLi*_*ter 5 postgresql ubuntu supervisord postgresql-9.1
我想在Ubuntu 10.04上使用Supervisor运行PostgreSQL 9.1.目前,我使用init脚本手动启动PostgreSQL:
/etc/init.d/postgresql start
Run Code Online (Sandbox Code Playgroud)
根据这篇文章:http://nicksergeant.com/using-postgresql-with-supervisor-on-ubuntu-1010/,我需要修改PostgreSQL配置,使其在TCP端口而不是Unix套接字上运行,以便使PostgreSQL与Supervisor一起工作.
关于这种方法,我有两个问题:
考虑到这更像是黑客攻击,这样做是否有任何暗示(例如安全/权限,性能等)?
为什么我们不能postgresql在Supervisor配置中运行相同的init脚本?相反,如上面的链接所示,它运行postmaster?
更新:
感谢下面两个答案的有用建议,我已经为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"
Run Code Online (Sandbox Code Playgroud)
我还设置了配置:/etc/postgresql/9.1/main/start.conf以manual让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
Run Code Online (Sandbox Code Playgroud)
所以现在,我可以supervisorctl通过执行来启动PostgreSQL start postgres,运行正常.但是,在我发布之后stop postgres,虽然supervisorctl声明postgres已停止,但服务器显然仍在运行,因为我可以将psql插入其中.
我想知道这是Supervisor配置问题还是PostgreSQL问题.欢迎任何建议!
博客文章写得相当糟糕。没有“TCP 模式”:帖子建议的方法仍然会监听 Unix 套接字,只是在不同的目录中。帖子中的评论(例如“外部 pid 文件 - TCP 模式不需要”)非常具有误导性。
postmaster是 postgresql 可执行文件的传统名称(以区分主调度进程和后端从进程)。一段时间以来,没有单独的可执行文件,现在它被简单地安装为“postgres”。
假设 Supervisor 与 qmail/daemontoolssupervise方案大致相似,那么完全有可能(事实上,很正常)让它运行一个设置目录和环境的脚本,然后使用必要的参数执行 postgres(或传播给包装器脚本的参数,这对于监督来说是不常见的,但当你有一个配置文件来放入参数时更有意义)。
工作方式supervise(我将继续假设“Supervisor”是相同的)是让主管进程按指定运行一个子进程,并在退出时简单地重新启动一个新的子进程。这是基于这样的想法:正在启动的进程是一个长期存在的守护进程,只有在出现严重错误时才会退出,并且只需重新启动它就是一个有效的修复。相比之下,诸如 in 之类的 init 脚本/etc/init.d运行子进程并将其分离,并将控制权返回给调用者 - 如果子进程退出,则不会发生任何特殊情况,并且必须手动重新启动。如果您尝试简单地/etc/init.d/postgresql start从监督运行,它将不断生成 postgresql 守护进程,因为 init 脚本的返回将被解释为守护进程进程已退出,而实际上它已启动并分离。
| 归档时间: |
|
| 查看次数: |
6414 次 |
| 最近记录: |