4

I'm trying to create a lsb resource with pcs on rhel7.2 The "sybase" script is about Sybase Database ASE Server and Backup Server Startup & Stop & Restart $ status script

Before

[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

After I add sybase lsb reesource call 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

Error

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

So I followed the steps detailed in Appendix G. Init Script LSB Compliance to check my sybase script.

When I tested item 5 of these steps, my output printed result:0

Status (stopped):

/etc/init.d/some_service status ; echo "result: $?"

My questions:

  • Did the script accept the command?
  • Did the script indicate the service was not running?
  • Did the command print result: 3 (in addition to its usual output)?
  • How can I fix it?
#!/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


The script is all pass LSB-compatible, but it doesn't work!

#!/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&lt;31; i++))
do
    sleep 1
    echo &quot;waitting $i sec to prepare Backup Server!&quot;
done

SYBASE_BS_START=$&quot;Starting ${NAME} Backup Server: &quot;
$SU sybase -c &quot;. $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=$&quot;Stopping ${NAME} Adaptive Server: &quot;
$SU sybase -c &quot;. $SYBASE/SYBASE.sh; isql -S $SERVER -U sa -P sybase &lt; \

$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 &quot;$backupserver&quot; ]; then     
    echo &quot;sybase Backup Server is running!&quot; &amp;&amp; exit 0 || exit $?
else
    echo &quot;sybase Backup Server is stopped!&quot;
    exit 3
fi

}

case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac

Do you have any suggestions how to solve the problem ?

Nils
  • 7,815

2 Answers2

2

The results of pcs resource show ase157_res is op start timeout="20s" ?

Since it takes 30 seconds to "/etc/init.d/that_script start", timeout= must be more than that.

1

Have you tried simply adding an, exit 3, in the status function of the script to make it compliant?

Something like this should work:

# 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
}

EDIT0: The Failed Action was for the start operation. When I am trying to debug what's failing in a script, I start throwing "logger" commands in it so I can debug where/why the failure is happening by looking at the logs.

Something like this:

# 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

Then take a look at the logs (/var/log/messages, or /var/log/syslog) and look for your "DEBUG" messages to determine where in the script things are failing.