2

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 ?

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
  • I missed the "Timed Out" bit. This is probably the correct solution. – Matt Kereczman Apr 21 '16 at 17:44
0

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.

2
  • Thank you! I did it but it still doesn't works. Here is the script I changed. – Arthur Cheng Apr 21 '16 at 14:15
  • @ArthurCheng: I see that it was a start operation failure now. I added a bit on debugging the script that might help you find the problem. – Matt Kereczman Apr 21 '16 at 14:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.