#!/bin/sh # # Dr.Web drweb-configd init script # # $Id: 7e07d2ad0adf8734d610911ac40c4c0ca81839ef $ # # chkconfig: 235 20 80 # description: drweb-configd is a Dr.Web Configuration Daemon # processname: drweb-configd # config: /etc/opt/drweb.com/drweb.ini # pidfile: /var/run/drweb-configd.pid ### BEGIN INIT INFO # Provides: drweb-configd # Required-Start: $local_fs $network # Required-Stop: $null # Should-Start: dkms_autoinstaller # Should-Stop: $null # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Description: drweb-configd is a Dr.Web Configuration Daemon ### END INIT INFO DAEMON=/opt/drweb.com/bin/drweb-configd PIDFILE=/var/run/drweb-configd.pid TIMEOUT=300 PATH=/usr/xpg4/bin:/bin:/usr/bin:/usr/ucb:/sbin:/usr/sbin:${PATH} EXIT_SUCCESS=0 EXIT_FAILURE_NOFILE=1 EXIT_FAILURE_RUNNING=2 EXIT_FAILURE_NOT_RUNNING=3 EXIT_FAILURE_TIMEOUT=4 EXIT_FAILURE_NOARGS=5 EXIT_FAILURE_NOT_ROOT=6 STATUS_NOPID=1 STATUS_ALIVE=0 STATUS_NOT_ALIVE=2 STATUS_WRONG_PID=3 if test -n "$1" -a ! "$1" = "status" ; then case "`id`" in uid=0*) ;; *) echo "$0 $1 must be executed with root privileges" exit $EXIT_FAILURE_NOT_ROOT ;; esac fi ulimit -n 16384 get_pid() { head -1 "$PIDFILE" 2>/dev/null } check_pid() { if test -r "$PIDFILE" ; then pid=`get_pid` if test -n "$pid" ; then if kill -0 "$pid" 2>/dev/null || ps -p "$pid" >/dev/null 2>&1 ; then return $STATUS_ALIVE else return $STATUS_NOT_ALIVE fi else return $STATUS_WRONG_PID fi else return $STATUS_NOPID fi } start_daemon() { if test $USE_SYSTEMCTL -eq 1; then exec /bin/systemctl --job-mode=ignore-dependencies start drweb-configd.service fi die_if_running if test ! -x "$DAEMON" ; then echo "Dr.Web drweb-configd is not installed" exit $EXIT_FAILURE_NOFILE fi add_execaps=0 if type execaps >/dev/null 2>&1 && cat /etc/astra_version | grep '^SE 1.5' >/dev/null 2>&1; then add_execaps=1 fi if test $add_execaps -eq 1; then execaps -c 0x100 -- "$DAEMON" -d -p "$PIDFILE" >/dev/null 2>&1 else "$DAEMON" -d -p "$PIDFILE" >/dev/null 2>&1 fi retval=$? if test $retval -ne 0; then die_if_cant_start fi return $retval } stop_daemon() { if test $USE_SYSTEMCTL -eq 1; then exec /bin/systemctl --job-mode=ignore-dependencies stop drweb-configd.service fi check_if_not_running pid=`get_pid` if test -n "$pid" ; then kill "$pid" fi seconds=0 retval=0 while check_pid ; do sleep 1 printf "." seconds=`expr $seconds + 1` if test "$seconds" -gt "$TIMEOUT" ; then retval=1 break fi done test "$seconds" -gt "0" && echo test $retval -eq 0 && rm -f "$PIDFILE" || die_if_timeout return $retval } reload_daemon() { if test $USE_SYSTEMCTL -eq 1; then exec /bin/systemctl --job-mode=ignore-dependencies reload drweb-configd.service fi check_if_not_running pid=`get_pid` if test -n "$pid" ; then kill -HUP "$pid" fi } restart_daemon() { if test $USE_SYSTEMCTL -eq 1; then exec /bin/systemctl --job-mode=ignore-dependencies restart drweb-configd.service fi if check_pid ; then stop_daemon || die_if_timeout fi start_daemon || die_if_cant_start } condrestart_daemon() { if test $USE_SYSTEMCTL -eq 1; then exec /bin/systemctl --job-mode=ignore-dependencies try-restart drweb-configd.service fi check_if_not_running stop_daemon || die_if_timeout start_daemon || die_if_cant_start } daemon_status() { if test $USE_SYSTEMCTL -eq 1; then exec /bin/systemctl status drweb-configd.service fi check_pid case "$?" in $STATUS_ALIVE) echo "Dr.Web drweb-configd is running" ;; $STATUS_NOPID) echo "Dr.Web drweb-configd is not running" ;; $STATUS_NOT_ALIVE|$STATUS_WRONG_PID) echo "Dr.Web drweb-configd is not running but $PIDFILE exists" ;; esac } die() { echo "$2" && exit $1 } die_if_running() { check_pid && die $EXIT_FAILURE_RUNNING "Dr.Web drweb-configd is already running" } check_if_not_running() { check_pid case "$?" in $STATUS_NOPID) echo "Dr.Web drweb-configd is not running" exit $EXIT_SUCCESS ;; $STATUS_NOT_ALIVE|$STATUS_WRONG_PID) die $EXIT_FAILURE_NOT_RUNNING \ "Dr.Web drweb-configd is not running but $PIDFILE exists" ;; esac } die_if_timeout() { die $EXIT_FAILURE_RUNNING "Dr.Web drweb-configd seems is still running" } die_if_cant_start() { die $EXIT_FAILURE_NOT_RUNNING "Failed to start Dr.Web drweb-configd" } USE_SYSTEMCTL=0 if test -x /bin/systemctl && cat /proc/1/comm 2>/dev/null | grep systemd 1>/dev/null 2>&1; then state=$(/bin/systemctl -p LoadState show drweb-configd.service 2>/dev/null) if test "$state" = "LoadState=not-found"; then USE_SYSTEMCTL=0 elif test "$state" = "LoadState=masked"; then die $EXIT_SUCCESS "Dr.Web drweb-configd is masked" else if test $PPID -ne 1 -a -z "${init:-}" -a -z "${SYSTEMCTL_REDIRECT:-}"; then USE_SYSTEMCTL=1 else export SYSTEMCTL_REDIRECT=1 fi fi fi case "$1" in stop) echo "Shutting down Dr.Web drweb-configd..." stop_daemon ;; reload) echo "Reloading Dr.Web drweb-configd..." reload_daemon ;; restart) echo "Restarting Dr.Web drweb-configd..." restart_daemon ;; condrestart) echo "Restarting Dr.Web drweb-configd..." condrestart_daemon ;; start) echo "Starting Dr.Web drweb-configd..." start_daemon ;; status) daemon_status ;; *) echo "Usage: $0 {start|stop|restart|condrestart|reload|status}" exit $EXIT_FAILURE_NOARGS ;; esac exit $EXIT_SUCCESS