#!/bin/sh
#
# dm_service_uninstaller.sh This shell script takes care of uninstall dm service from
# the rc.d or systemd of the OS
#
# dameng database co,. ltd.
# tech@dameng.com
DM_HOME="/home/dm/dmdbms"
OS_NAME=`uname`
if [ "$OS_NAME" = "SunOS" -o "$OS_NAME" = "AIX" -o "$OS_NAME" = "HP-UX" ]
then
echonsign=""
echosnsign="\c"
else
echonsign="-n"
echosnsign=""
fi
usage()
{
echo "Usage: `basename "$0"` [-n service_name]"
}
show_help()
{
usage
printf "%-10s%s\n" " -n" "服务名,删除指定服务"
printf "%-10s%s\n" " -h" "帮助"
}
is_dm_service()
{
dm_service_desc=`head -20 "$1" | grep "# service name"`
if [ "x$dm_service_desc" = "x" ]
then
return 1
fi
is_dmamon_service=`echo "$dm_service_desc" | grep DmAuditMonitorService`
is_dmjmon_service=`echo "$dm_service_desc" | grep DmJobMonitorService`
is_dmimon_service=`echo "$dm_service_desc" | grep DmInstanceMonitorService`
is_dmap_service=`echo "$dm_service_desc" | grep DmAPService`
is_dmserver_service=`echo "$dm_service_desc" | grep DmService`
is_dmwatcher_service=`echo "$dm_service_desc" | grep DmWatcherService`
is_dmmonitor_service=`echo "$dm_service_desc" | grep DmMonitorService`
is_dmcss_service=`echo "$dm_service_desc" | grep DmCSSService`
is_dmcssm_service=`echo "$dm_service_desc" | grep DmCSSMonitorService`
is_dmasmsvr_service=`echo "$dm_service_desc" | grep DmASMSvrService`
is_dmasmsvrm_service=`echo "$dm_service_desc" | grep DmASMSvrmService`
if [ "x$is_dmamon_service" = "x" -a "x$is_dmjmon_service" = "x" -a "x$is_dmimon_service" = "x" -a "x$is_dmap_service" = "x" -a "x$is_dmserver_service" = "x" -a "x$is_dmwatcher_service" = "x" -a "x$is_dmmonitor_service" = "x" -a "x$is_dmcss_service" = "x" -a "x$is_dmcssm_service" = "x" -a "x$is_dmasmsvr_service" = "x" -a "x$is_dmasmsvrm_service" = "x" ]
then
return 1
fi
return 0
}
can_del_dm_service()
{
if [ "x$is_dmamon_service" = "x" -a "x$is_dmjmon_service" = "x" -a "x$is_dmimon_service" = "x" -a "x$is_dmap_service" = "x" ]
then
return 0
fi
return 1
}
# run by root
RUID=`/usr/bin/id|awk -F\( '{print $1}'|awk -F\= '{print $2}'`
if [ ${RUID} != "0" ]
then
echo "必须以 root 身份执行此脚本"
exit 1
fi
DEL_SERVICE_NAME=""
QUIET_DELETE=""
while getopts "n:hq" opt; do
case $opt in
n)
DEL_SERVICE_NAME="$OPTARG"
;;
q)
QUIET_DELETE="Y"
;;
h)
show_help
exit 0
;;
?)
usage
exit 1
;;
:)
usage
exit 1
;;
esac
done
#check opt
if [ "x$DEL_SERVICE_NAME" = "x" ]
then
echo "指定删除的服务名不能空!"
exit 1
fi
if [ "x$QUIET_DELETE" = "x" ]
then
# confirm delete
DEL_INFO_STR="是否删除服务($DEL_SERVICE_NAME)?(Y/y:是 N/n:否): "
while :
do
echo $echonsign "$DEL_INFO_STR$echosnsign"
read DEL_FLAG
if [ "$DEL_FLAG" = "N" ] || [ "$DEL_FLAG" = "n" ]
then
exit 1
elif [ "$DEL_FLAG" = "Y" ] || [ "$DEL_FLAG" = "y" ]
then
break
else
continue
fi
done
fi
DM_SERVICE_NAME="$DEL_SERVICE_NAME"
SYSTEMD_ETC_PATH="/etc/systemd/system"
IS_SYSTEMD="false"
systemctl --version>/dev/null 2>&1
RETURN_CODE="$?"
if [ "$RETURN_CODE" = "0" -a -d "$SYSTEMD_ETC_PATH" ]
then
IS_SYSTEMD="true"
fi
if [ "$OS_NAME" = "Linux" -a "$IS_SYSTEMD" = "true" ]
then
SYSTEMD_USER_PATH="/usr/lib/systemd/system"
if [ ! -d "$SYSTEMD_USER_PATH" ]
then
SYSTEMD_USER_PATH="/lib/systemd/system"
fi
if [ ! -d "$SYSTEMD_USER_PATH" ]
then
echo "系统服务目录($SYSTEMD_USER_PATH)不存在!"
exit 1
fi
SERVICE_FILE_PATH="$SYSTEMD_USER_PATH/$DM_SERVICE_NAME".service
if [ ! -f "$SERVICE_FILE_PATH" ]
then
SERVICE_FILE_PATH="$SYSTEMD_ETC_PATH/$DM_SERVICE_NAME".service
if [ ! -f "$SERVICE_FILE_PATH" ]
then
echo "未发现服务文件($SYSTEMD_USER_PATH/$DM_SERVICE_NAME.service或$SYSTEMD_ETC_PATH/$DM_SERVICE_NAME.service)!"
exit 1
fi
fi
is_dm_service "$DM_HOME/bin/$DM_SERVICE_NAME"
if [ $? = 1 ]
then
echo "服务脚本文件($SERVICE_FILE_PATH)不是达梦服务脚本文件!"
exit 1
fi
systemctl stop "$DM_SERVICE_NAME".service
systemctl disable "$DM_SERVICE_NAME".service
rm -f "$SERVICE_FILE_PATH"
can_del_dm_service
if [ $? -eq 0 ]
then
rm -f "$DM_HOME/bin/$DM_SERVICE_NAME"
fi
if [ ! -f "$SERVICE_FILE_PATH" ]
then
echo "删除服务文件($SERVICE_FILE_PATH)完成"
echo "删除服务($DM_SERVICE_NAME)完成"
fi
else
# get the rc dir of system
OS_INIT_D_DIR="/etc/rc.d/init.d"
OS_RC_DIR="/etc/rc.d"
if [ "$OS_NAME" = "Linux" ]
then
if [ -d "$OS_RC_DIR/rc0.d" ]
then
OS_INIT_D_DIR="/etc/rc.d/init.d"
if [ ! -d "$OS_INIT_D_DIR" ]
then
OS_INIT_D_DIR="/etc/init.d"
fi
OS_RC_DIR="/etc/rc.d"
else
OS_INIT_D_DIR="/etc/init.d"
OS_RC_DIR="/etc"
fi
elif [ "$OS_NAME" = "SunOS" ]
then
OS_INIT_D_DIR="/etc/init.d"
OS_RC_DIR="/etc"
elif [ "$OS_NAME" = "AIX" ]
then
OS_INIT_D_DIR="/etc/rc.d/init.d"
OS_RC_DIR="/etc/rc.d"
elif [ "$OS_NAME" = "HP-UX" ]
then
OS_INIT_D_DIR="/sbin/init.d"
OS_RC_DIR="/sbin"
elif [ "$OS_NAME" = "FreeBSD" ]
then
OS_INIT_D_DIR="/usr/local/etc/rc.d"
OS_RC_LOCAL_FILE="/etc/rc.local"
fi
if [ ! -d "$OS_INIT_D_DIR" ]
then
echo "系统服务目录($OS_INIT_D_DIR)不存在!"
exit 1
fi
if [ ! -f "$OS_INIT_D_DIR/$DM_SERVICE_NAME" ]
then
echo "未发现服务文件($OS_INIT_D_DIR/$DM_SERVICE_NAME)!"
exit 1
fi
# delete service
SERVICE_FILE_PATH="$OS_INIT_D_DIR/$DM_SERVICE_NAME"
if [ -f "$SERVICE_FILE_PATH" ]
then
is_dm_service "$SERVICE_FILE_PATH"
if [ $? = 1 ]
then
echo "服务脚本文件($SERVICE_FILE_PATH)不是达梦服务脚本文件!"
exit 1
fi
"$SERVICE_FILE_PATH" stop
if [ "x$is_dmasmsvr_service" != "x" -o "x$is_dmasmsvrm_service" != "x" ]
then
#level
DEFAULT_LEVEL_K=04
DEFAULT_LEVEL_S=96
if [ "$OS_NAME" = "HP-UX" ]
then
DEFAULT_LEVEL_K=390
DEFAULT_LEVEL_S=610
fi
elif [ "x$is_dmcss_service" != "x" ]
then
#level
DEFAULT_LEVEL_K=06
DEFAULT_LEVEL_S=94
if [ "$OS_NAME" = "HP-UX" ]
then
DEFAULT_LEVEL_K=400
DEFAULT_LEVEL_S=600
fi
else
#level
DEFAULT_LEVEL_K=02
DEFAULT_LEVEL_S=98
if [ "$OS_NAME" = "HP-UX" ]
then
DEFAULT_LEVEL_K=200
DEFAULT_LEVEL_S=800
fi
fi
if [ "$OS_NAME" = "Linux" -o "$OS_NAME" = "SunOS" -o "$OS_NAME" = "AIX" ]
then
if [ "$OS_NAME" = "Linux" ]
then
if [ ! -f "/sbin/chkconfig" ] && [ ! -f "/usr/sbin/update-rc.d" ]
then
echo "未发现chkconfig或update-rc.d可执行程序!"
#confirm continue delete
CONTINUE_DEL_INFO_STR="是否继续删除服务($DEL_SERVICE_NAME)?(Y/y:是 N/n:否):"
while :
do
echo $echonsign "$CONTINUE_DEL_INFO_STR$echosnsign"
read IGNORE_SERVICE_MGR
if [ "$IGNORE_SERVICE_MGR" = "N" ] || [ "$IGNORE_SERVICE_MGR" = "n" ]
then
exit 1
elif [ "$IGNORE_SERVICE_MGR" = "Y" ] || [ "$IGNORE_SERVICE_MGR" = "y" ]
then
break
else
continue
fi
done
fi
fi
if [ -d "$OS_RC_DIR/rc0.d" ]
then
rm -f "$OS_RC_DIR/rc0.d/K$DEFAULT_LEVEL_K$DM_SERVICE_NAME"
fi
if [ -d "$OS_RC_DIR/rc1.d" ]
then
rm -f "$OS_RC_DIR/rc1.d/K$DEFAULT_LEVEL_K$DM_SERVICE_NAME"
fi
if [ -d "$OS_RC_DIR/rc2.d" ]
then
rm -f "$OS_RC_DIR/rc2.d/S$DEFAULT_LEVEL_S$DM_SERVICE_NAME"
fi
if [ -d "$OS_RC_DIR/rc3.d" ]
then
rm -f "$OS_RC_DIR/rc3.d/S$DEFAULT_LEVEL_S$DM_SERVICE_NAME"
fi
if [ -d "$OS_RC_DIR/rc4.d" ]
then
rm -f "$OS_RC_DIR/rc4.d/S$DEFAULT_LEVEL_S$DM_SERVICE_NAME"
fi
if [ -d "$OS_RC_DIR/rc5.d" ]
then
rm -f "$OS_RC_DIR/rc5.d/S$DEFAULT_LEVEL_S$DM_SERVICE_NAME"
fi
if [ -d "$OS_RC_DIR/rc6.d" ]
then
rm -f "$OS_RC_DIR/rc6.d/K$DEFAULT_LEVEL_K$DM_SERVICE_NAME"
fi
if [ "$OS_NAME" = "Linux" ]
then
if [ -f "/sbin/chkconfig" ]
then
/sbin/chkconfig --del "$DM_SERVICE_NAME"
else
:
fi
fi
elif [ "$OS_NAME" = "HP-UX" ]
then
rm -f "$OS_RC_DIR/rc0.d/K$DEFAULT_LEVEL_K$DM_SERVICE_NAME"
rm -f "$OS_RC_DIR/rc1.d/S$DEFAULT_LEVEL_S$DM_SERVICE_NAME"
rm -f "$OS_RC_DIR/rc2.d/S$DEFAULT_LEVEL_S$DM_SERVICE_NAME"
rm -f "$OS_RC_DIR/rc3.d/K$DEFAULT_LEVEL_K$DM_SERVICE_NAME"
elif [ "$OS_NAME" = "FreeBSD" ]
then
if [ ! -f "$OS_RC_LOCAL_FILE" ]
then
continue
fi
OLD_SERVICE_CONTENT=`cat "$OS_RC_LOCAL_FILE" | grep "^$DM_SERVICE_NAME""_enable="`
if [ "x$OLD_SERVICE_CONTENT" = "x" ]
then
continue
fi
for ONE_OLD_SERVICE_CONTENT in "$OLD_SERVICE_CONTENT"
do
if [ "x$ONE_OLD_SERVICE_CONTENT" = "x" ]
then
continue
fi
cp "$OS_RC_LOCAL_FILE" "/tmp/rc.local_bak"
cat "/tmp/rc.local_bak" | sed "s/$ONE_OLD_SERVICE_CONTENT//g" > "$OS_RC_LOCAL_FILE"
rm -f "/tmp/rc.local_bak"
done
fi
can_del_dm_service
if [ $? -eq 0 ]
then
rm -f "$SERVICE_FILE_PATH"
else
mv "$SERVICE_FILE_PATH" "$DM_HOME/bin"
OWNER_NAME=`ls -ld "$DM_HOME" | awk '{print $3}'`
GROUP_NAME=`ls -ld "$DM_HOME" | awk '{print $4}'`
chown $OWNER_NAME:$GROUP_NAME "$DM_HOME/bin/$DM_SERVICE_NAME"
fi
if [ ! -f "$SERVICE_FILE_PATH" ]
then
echo "删除服务文件($SERVICE_FILE_PATH)完成"
echo "删除服务($DM_SERVICE_NAME)完成"
fi
fi
fi
exit 0
400行代码