解决Ganglia增加Python模块后启动问题的过程
最近增加Ganglia的Python模块后,发现Ganglia官方源码包提供的gmond.init文件不好用了。
使用的Python是自己编译的,如果Python是系统rpm包安装的就没有这个问题了。
比如启动gmond服务,提示成功。但ps下却没有gmond的进程。于是研究了下这个gmond.init文件。
service gmond stop 倒是没有什么问题,手动执行gmond命令执行也没有问题,关键在于start参数,所以解决问题的代码,就主要是下面几行了:
#!/bin/sh
#
# chkconfig: 2345 70 40
# description: gmond startup script
#
GMOND=/usr/sbin/gmond
# TMPDIR set to SysV IPC ramdrive to avoid include processing failures
TMPDIR=/dev/shm
export TMPDIR
. /etc/rc.d/init.d/functions
RETVAL=0
case "$1" in
start)
echo -n "Starting GANGLIA gmond: "
[ -f $GMOND ] || exit 1
daemon $GMOND
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/gmond
;
由于Python是自己编译的,所以我想问题很大可能是出现在环境变量。于是加了两行代码,加完后如下:
- #!/bin/sh
- #
- # chkconfig: 2345 70 40
- # description: gmond startup script
- #
- GMOND=/usr/sbin/gmond
- # TMPDIR set to SysV IPC ramdrive to avoid include processing failures
- TMPDIR=/dev/shm
- export TMPDIR
- TPATH=$PATH
- . /etc/rc.d/init.d/functions
- PATH=$TPATH
- RETVAL=0
- case "$1" in
- start)
- echo -n "Starting GANGLIA gmond: "
- [ -f $GMOND ] || exit 1
- daemon $GMOND
- RETVAL=$?
- echo
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/gmond
- ;
改完后的代码使用/etc/init.d/gmond执行没有任何问题,所以能够很肯定是环境变量PATH的问题了。前文说过我的python是自己编译的,为了不影响yum的时候,我软连接到了/usr/local/bin/python,而使用service gmond start去执行的时候PATH变量是service脚本定义的,而并非如何当前shell用户自己定义的,所以我又改动了代码如下就没问题了:
- #!/bin/sh
- #
- # chkconfig: 2345 70 40
- # description: gmond startup script
- #
- GMOND=/usr/sbin/gmond
- # TMPDIR set to SysV IPC ramdrive to avoid include processing failures
- TMPDIR=/dev/shm
- export TMPDIR
- . /etc/rc.d/init.d/functions
- PATH=/usr/local/bin:$PATH
- RETVAL=0
- case "$1" in
- start)
- echo -n "Starting GANGLIA gmond: "
- [ -f $GMOND ] || exit 1
- daemon $GMOND
- RETVAL=$?
- echo
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/gmond
- ;