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

Do you have any suggestions how to solve the problem ?

Nils
  • 7,657
  • 3
  • 31
  • 71
Arthur Cheng
  • 41
  • 1
  • 2

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.

Taichi Yanagiya
  • 392
  • 1
  • 6
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.

Matt Kereczman
  • 1,887
  • 8
  • 12