Below you can find a script, that can be used to automatically manage Sybase on Linux machine and it can be probably also used on other Unix machines. You can call it with start or stop or restart parameter, so this is a good candidate to use it with every systemd compatible operating system.
If you would like to have Sybase starting after each OS boot perform following configuration. Create a service file and save it as /etc/systemd/sysctl/sybase.service. If required change the path to point to correct location of the scrip sybase_start
[Unit] Description=SYBASE ASE After=network.target [Service] ExecStart=/opt/sap/sybase_start start Type=forking PIDFile=/opt/sap/sybase.pid ExecStop=/opt/sap/sybase_start stop [Install] WantedBy=multi-user.targetAs you see, we need to have additional script named sybase_start. Note the paths that are used at the beginning of the script. Starting sybase is easy, however stopping may be slightly tricky. Server should generally be stopped using the SQL shutdown command, but than the password needs to be given in clear text in the script. As I don't like this solution I decided to kill the dataserver process, what is not compliant with Sybase best practices, but you can change this.Just comment my command and uncomment the other one.
Content of /opt/sap/sybase_start script:
#!/bin/sh
#
# Startup script for Sybase ASE
#
# description: Sybase Adaptive Server Enterprise
# is a SQL database server.
# processname: dataserver
#change the path to where sybase has been installed and how your server is named
SYBASE=/opt/sap
SERVER=SAP01
# 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_START=$"Starting ${NAME} service: "
$SU sap -c ". $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/bin/startserver \
-f $SYBASE/$SYBASE_ASE/install/RUN_${SERVER} > /dev/null"
ret=$?
if [ $ret -eq 0 ]
then
showserver | grep dataserver | awk '{ print $4 }' > /opt/sap/sybase.pid
echo "$SYBASE_START Success."
else
echo "$SYBASE_START Failed!"
exit 1
fi
}
stop() {
echo -n $"Stopping ${NAME} service: "
#password needs to be given in clear text:
#$SU sap -c ". $SYBASE/SYBASE.sh; isql -S $SERVER -U sa -P '******' < \
#$SYBASE/$SYBASE_ASE/upgrade/shutdown.sql > /dev/null"
#kill the process
pkill dataserver
ret=$?
if [ $ret -eq 0 ]
then
echo "Success."
else
echo "Failed!"
exit 1
fi
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
Having those 2 files, now the service should be registered. Issue following commands:
1. To force systemd to note that a new service has been created:
systemctl daemon-reload
2. To enable the systemd to start the Sybase at boot:
systemctl enable sybase.service
3. To start the service manually:
systemctl start sybase.service
4. To check the status of the service:
systemctl status sybase.service
systemctl stop sybase.service
/etc/systemd/sysctl/sybase.service
[Unit] Description=SYBASE ASE BS After=network.target [Service] ExecStart=/opt/sap/sybase_bs_start start Type=forking PIDFile=/opt/sap/sybase_bs.pid ExecStop=/opt/sap/sybase_bs_start stop [Install] WantedBy=multi-user.target
/opt/sap/sybase_start
#!/bin/sh
#
# Startup script for Sybase Backup Server
#
# description: Sybase Adaptive Server Enterprisea Backup Server
# is a SQL database backup server.
# processname: backupserver
SYBASE=/opt/sap
SERVER=SAP01_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_START=$"Starting ${NAME} service: "
$SU sap -c ". $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/bin/startserver \
-f $SYBASE/$SYBASE_ASE/install/RUN_${SERVER} > /dev/null"
ret=$?
if [ $ret -eq 0 ]
then
showserver | grep backupserver | awk '{ print $4 }' > /opt/sap/sybase_bs.pid
echo "$SYBASE_START Success."
else
echo "$SYBASE_START Failed!"
exit 1
fi
}
stop() {
echo -n $"Stopping ${NAME} service: "
#password needs to be given in clear text
#$SU sap -c ". $SYBASE/SYBASE.sh; isql -S $SERVER -U sa -P '' < \
#$SYBASE/$SYBASE_ASE/upgrade/shutdown.sql > /dev/null"
#or execute sql command:
#shutdown SYB_BACKUP with nowait
#kill the process:
pkill backupserver
ret=$?
if [ $ret -eq 0 ]
then
echo "Success."
else
echo "Failed!"
exit 1
fi
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
Remember to register this service as it was done with the previous one.Have fun!

I see some info in KBA 2020192 that ASE does some level of processing in response to a SIGTERM signal. I wonder if there's any risk of corruption?
ReplyDeleteThe backup server start scrip must be modified
ReplyDelete