我试图在rhel7.2上用pcs创build一个lsb资源“sybase”脚本是关于Sybase数据库ASE服务器和备份服务器启动和停止并重新启动$ status脚本
之前
[root@pldbsv01 ~]# pcs status Cluster name: PLDBSV_CLUSTER Last updated: Tue Apr 19 23:18:44 2016 Last change: Tue Apr 19 22:59:07 2016 by root via cibadmin on pldbsv02-cr Stack: corosync Current DC: pldbsv02-cr (version 1.1.13-10.el7-44eb2dd) - partition with quorum 2 nodes and 9 resources configured Online: [ pldbsv01-cr pldbsv02-cr ] Full list of resources: Resource Group: PLDBSV_RESOURCE PLDBSV_VIP (ocf::heartbeat:IPaddr2): Started pldbsv01-cr idrac-pldbsv01 (stonith:fence_ipmilan): Started pldbsv02-cr idrac-pldbsv02 (stonith:fence_ipmilan): Started pldbsv01-cr Clone Set: dlm-clone [dlm] Started: [ pldbsv01-cr ] Stopped: [ pldbsv02-cr ] Clone Set: clvmd-clone [clvmd] Started: [ pldbsv01-cr ] Stopped: [ pldbsv02-cr ] Clone Set: gfs2sybasedata_res-clone [gfs2sybasedata_res] Started: [ pldbsv01-cr ] Stopped: [ pldbsv02-cr ] PCSD Status: pldbsv01-cr: Online pldbsv02-cr: Online Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
在添加sybase lsb reesource调用ase157_res之后
[root@pldbsv01 ~]# pcs resource create ase157_res lsb:sybase op monitor interval=30s [root@pldbsv01 ~]# pcs constraint order start gfs2sybasedata_res-clone then ase157_res Adding gfs2sybasedata_res-clone ase157_res (kind: Mandatory) (Options: first-action=start then-action=start) [root@pldbsv01 ~]# pcs constraint colocation add ase157_res with gfs2sybasedata_res-clone [root@pldbsv01 ~]# pcs status Cluster name: PLDBSV_CLUSTER Last updated: Wed Apr 20 12:22:51 2016 Last change: Wed Apr 20 12:20:18 2016 by root via cibadmin on pldbsv01-cr Stack: corosync Current DC: pldbsv01-cr (version 1.1.13-10.el7-44eb2dd) - partition with quorum 2 nodes and 10 resources configured Online: [ pldbsv01-cr pldbsv02-cr ] Full list of resources: Resource Group: PLDBSV_RESOURCE PLDBSV_VIP (ocf::heartbeat:IPaddr2): Started pldbsv02-cr idrac-pldbsv01 (stonith:fence_ipmilan): Started pldbsv01-cr idrac-pldbsv02 (stonith:fence_ipmilan): Started pldbsv01-cr Clone Set: dlm-clone [dlm] Started: [ pldbsv02-cr ] Stopped: [ pldbsv01-cr ] Clone Set: clvmd-clone [clvmd] Started: [ pldbsv02-cr ] Stopped: [ pldbsv01-cr ] Clone Set: gfs2sybasedata_res-clone [gfs2sybasedata_res] Started: [ pldbsv02-cr ] Stopped: [ pldbsv01-cr ] ase157_res (lsb:sybase): Stopped Failed Actions: * ase157_res_start_0 on pldbsv02-cr 'unknown error' (1): call=41, status=Timed Out, exitreason='none', last-rc-change='Wed Apr 20 12:21:35 2016', queued=0ms, exec=20002ms * ase157_res_start_0 on pldbsv01-cr 'unknown error' (1): call=45, status=Timed Out, exitreason='none', last-rc-change='Wed Apr 20 12:19:56 2016', queued=0ms, exec=20002ms PCSD Status: pldbsv01-cr: Online pldbsv02-cr: Online Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
错误
失败的操作:
所以我按照附录G中详细介绍的步骤进行操作。初始化脚本LSB合规性检查我的sybase脚本。
当我testing这些步骤的第5项时,我的输出结果是:0
状态(已停止):
/etc/init.d/some_service状态; 回声“结果:$?”
我的问题:
#!/bin/sh # # Startup script for Sybase ASE # Description: Service script for starting/stopping/monitoring \ # Sybase Adaptive Server on: \ # Red Hat Enterprise Linux 6 \ # Release date 2015-08-11 # Version 1 # Processname: dataserver # (1) Before running this script, we assume that user has installed # Sybase ASE 15.0.2 or higher version on the machine. # (2) This script should be put under /etc/init.d. Its owner should be "root" with # execution permission. # (3) You must define the variables "SYBASE" "SERVER" BACKUPSERVER" # (4) You can change Adaptive Server login name and password in line 96, # defaults are "sa" and "sybase" SYBASE=/opt/sybase SERVER=PLDBSV BACKUPSERVER=PLDBSV_BS # Source environment variables. . $SYBASE/SYBASE.sh # Find the name of the script NAME=`basename $0` # For SELinux we need to use 'runuser' not 'su' if [ -x /sbin/runuser ] then SU=runuser else SU=su fi # Start sybase Adaptive Server and Backup Server start() { SYBASE_ASE_START=$"Starting ${NAME} Adaptive Server: " $SU sybase -c ". $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/install/startserver \ -f $SYBASE/$SYBASE_ASE/install/RUN_${SERVER} > /dev/null" ret=$? if [ $ret -eq 0 ] then echo -n "$SYBASE_ASE_START [" echo -n -e "\033[32m Success \033[0m" echo "]" else echo -n "$SYBASE_ASE_START [" echo -n -e "\033[31m Failed \033[0m" echo "]" exit 1 fi for ((i=1; i<31; i++)) do sleep 1 echo "waitting $i sec to prepare Backup Server!" done SYBASE_BS_START=$"Starting ${NAME} Backup Server: " $SU sybase -c ". $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/install/startserver \ -f $SYBASE/$SYBASE_ASE/install/RUN_${BACKUPSERVER} > /dev/null" ret=$? if [ $ret -eq 0 ] then echo -n "$SYBASE_BS_START [" echo -n -e "\033[32m Success \033[0m" echo "]" else echo -n "$SYBASE_BS_START [" echo -n -e "\033[31m Failed \033[0m" echo "]" exit 1 fi } #stop sybase adaptive server and backup server stop() { SYBASE_BS_STOP=$"Stopping ${NAME} Backup Server" pid=$(pidof backupserver) if [ $pid > 0 ] then $SU root -c "kill -9 $pid > /dev/null" echo -n "$SYBASE_BS_STOP [" echo -n -e "\033[32m Success \033[0m" echo "]" else echo -n "$SYBASE_BS_STOP [" echo -n -e "\033[31m Failed \033[0m" echo "]" fi SYBASE_ASE_STOP=$"Stopping ${NAME} Adaptive Server: " $SU sybase -c ". $SYBASE/SYBASE.sh; isql -S $SERVER -U sa -P sybase < \ $SYBASE/$SYBASE_ASE/upgrade/shutdown.sql > /dev/null" ret=$? if [ $ret -eq 0 ] then echo -n "$SYBASE_ASE_STOP [" echo -n -e "\033[32m Success \033[0m" echo "]" else echo -n "$SYBASE_ASE_STOP [" echo -n -e "\033[31m Failed \033[0m" echo "]" exit 1 fi } restart() { stop start } # Check Sybase Adaptive Server and Backup Server status status() { dataserver=$(pidof dataserver) backupserver=$(pidof backupserver) if [ -n "$dataserver" ]; then echo "sybase Adaptive Server is running!" && exit 0 || exit $? else echo "sybase Adaptive Server is stopped!" fi if [ -n "$backupserver" ]; then echo "sybase Backup Server is running!" && exit 0 || exit $? else echo "sybase Backup Server is stopped!" exit 1 fi } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac
脚本全部通过LSB兼容 ,但不起作用!
#!/bin/sh # # Startup script for Sybase ASE # Description: Service script for starting/stopping/monitoring \ # Sybase Adaptive Server on: \ # Red Hat Enterprise Linux 6 \ # Release date 2015-08-11 # Version 1 # Processname: dataserver # (1) Before running this script, we assume that user has installed # Sybase ASE 15.0.2 or higher version on the machine. # (2) This script should be put under /etc/init.d. Its owner should be "root" with # execution permission. # (3) You must define the variables "SYBASE" "SERVER" BACKUPSERVER" # (4) You can change Adaptive Server login name and password in line 96, # defaults are "sa" and "sybase" SYBASE=/opt/sybase SERVER=PLDBSV BACKUPSERVER=PLDBSV_BS # Source environment variables. . $SYBASE/SYBASE.sh # Find the name of the script NAME=`basename $0` # For SELinux we need to use 'runuser' not 'su' if [ -x /sbin/runuser ] then SU=runuser else SU=su fi # Start sybase Adaptive Server and Backup Server start() { SYBASE_ASE_START=$"Starting ${NAME} Adaptive Server: " $SU sybase -c ". $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/install/startserver \ -f $SYBASE/$SYBASE_ASE/install/RUN_${SERVER} > /dev/null" ret=$? if [ $ret -eq 0 ] then echo -n "$SYBASE_ASE_START [" echo -n -e "\033[32m Success \033[0m" echo "]" else echo -n "$SYBASE_ASE_START [" echo -n -e "\033[31m Failed \033[0m" echo "]" exit 1 fi for ((i=1; i<31; i++)) do sleep 1 echo "waitting $i sec to prepare Backup Server!" done SYBASE_BS_START=$"Starting ${NAME} Backup Server: " $SU sybase -c ". $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/install/startserver \ -f $SYBASE/$SYBASE_ASE/install/RUN_${BACKUPSERVER} > /dev/null" ret=$? if [ $ret -eq 0 ] then echo -n "$SYBASE_BS_START [" echo -n -e "\033[32m Success \033[0m" echo "]" else echo -n "$SYBASE_BS_START [" echo -n -e "\033[31m Failed \033[0m" echo "]" exit 1 fi } #stop sybase adaptive server and backup server stop() { SYBASE_BS_STOP=$"Stopping ${NAME} Backup Server" pid=$(pidof backupserver) if [ $pid > 0 ] then $SU root -c "kill -9 $pid > /dev/null" echo -n "$SYBASE_BS_STOP [" echo -n -e "\033[32m Success \033[0m" echo "]" else echo -n "$SYBASE_BS_STOP [" echo -n -e "\033[31m Failed \033[0m" echo "]" fi SYBASE_ASE_STOP=$"Stopping ${NAME} Adaptive Server: " $SU sybase -c ". $SYBASE/SYBASE.sh; isql -S $SERVER -U sa -P sybase < \ $SYBASE/$SYBASE_ASE/upgrade/shutdown.sql > /dev/null" ret=$? if [ $ret -eq 0 ] then echo -n "$SYBASE_ASE_STOP [" echo -n -e "\033[32m Success \033[0m" echo "]" else echo -n "$SYBASE_ASE_STOP [" echo -n -e "\033[31m Failed \033[0m" echo "]" exit 0 fi } restart() { stop start } # Check Sybase Adaptive Server and Backup Server status status() { dataserver=$(pidof dataserver) backupserver=$(pidof backupserver) if [ -n "$dataserver" ]; then echo "sybase Adaptive Server is running!" else echo "sybase Adaptive Server is stopped!" fi if [ -n "$backupserver" ]; then echo "sybase Backup Server is running!" && exit 0 || exit $? else echo "sybase Backup Server is stopped!" exit 3 fi } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac
你有什么build议如何解决这个问题?
pcs resource show ase157_res结果pcs resource show ase157_res是op start timeout="20s" ?
由于“/etc/init.d/that_script start”需要30秒,所以timeout=必须大于此值。
你有没有尝试在脚本的状态函数中添加一个exit 3来使其符合?
像这样的东西应该工作:
# Check Sybase Adaptive Server and Backup Server status status() { dataserver=$(pidof dataserver) backupserver=$(pidof backupserver) if [ -n "$dataserver" ]; then echo "sybase Adaptive Server is running!" && exit 0 || exit $? else echo "sybase Adaptive Server is stopped!" exit 3 fi if [ -n "$backupserver" ]; then echo "sybase Backup Server is running!" && exit 0 || exit $? else echo "sybase Backup Server is stopped!" exit 1 fi }
编辑0 :失败的行动是为了开始操作。 当我试图在脚本中debugging什么是失败时,我开始在其中抛出“logging器”命令,以便通过查看日志来debugging发生故障的位置/原因。
像这样的东西:
# Start sybase Adaptive Server and Backup Server start() { logger "DEBUG: ENTERED START FUNCTION SYBASE_ASE_START=$"Starting ${NAME} Adaptive Server: " $SU sybase -c ". $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/install/startserver \ -f $SYBASE/$SYBASE_ASE/install/RUN_${SERVER} > /dev/null" ret=$? logger "DEBUG: RETURN CODE: $ret" logger "DEBUG: CHECK THE VARS:" logger "DEBUG: \$SU=$SU" logger "DEBUG: \$SYBASE/SYBASE.sh=$SYBASE/SYBASE.sh" logger "DEBUG: \$SYBASE_ASE=$SYBASE_ASE" logger "DEBUG: \${SERVER}=${SERVER}" if [ $ret -eq 0 ] then echo -n "$SYBASE_ASE_START [" echo -n -e "\033[32m Success \033[0m" echo "]" logger "DEBUG: We're about to leave \$ret -eq 0" else echo -n "$SYBASE_ASE_START [" echo -n -e "\033[31m Failed \033[0m" echo "]" logger "DEBUG: We're about to leave \$ret -ne 0" exit 1 fi
然后查看日志(/ var / log / messages或/ var / log / syslog)并查找“DEBUG”消息,以确定脚本中哪些地方失败。