标签为 Script 的文章

在CentOS上编写init.d service script

背景:
之前编写了一些脚本,下载了一些开源软件,想把它们做成系统服务,通过service your_prog_name start这样的方式来后台运行,并在开机时自动启动。
在了解了daemon命令之后,我发现使用它来编写这样的脚本非常方便,相关示例如下:

具体配置:
只需要将your_prog_name替换为你真正的脚本或执行文件的名称,将prog_path设置为具体的路径,以及其它的部分参数如执行用户prog_user,以及proc_conf与options等即可。
# vim /etc/init.d/your_prog_name

#!/bin/bash
#
# chkconfig: - 98 02
# description: Starts and stops the your_prog_name daemon.

. /etc/init.d/functions

prog_name="your_prog_name"
prog_path="/path/to/${prog_name}"
prog_user="your_prog_user"
prog_conf="/path/to/your_prog_conf"
pidfile="/path/to/${prog_name}.pid"
options="-c ${prog_conf}"

lockfile="/var/lock/subsys/${prog_name}"

[ -x "${prog_path}" ] || exit 1
[ -r "${prog_conf}" ] || exit 1

start(){
  echo -n $"Starting ${prog_name}: "
  daemon --user ${prog_user} ${prog_path} ${options}
  retval=$?
  prog_pid=$(pidof ${prog_path})
  [ ! -z "${prog_pid}" ] && echo ${prog_pid} > ${pidfile}
  echo
  [ $retval -eq 0 ] && touch ${lockfile}
  return $retval
}

stop(){
  echo -n $"Stopping ${prog_name}: "
  killproc -p ${pidfile} ${prog_name}
  retval=$?
  echo
  [ $retval -eq 0 ] && rm -f ${lockfile}
  return $retval
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    sleep 1
    start
    ;;
  status)
    status -p ${pidfile} ${prog_name}
    ;;
  *)
    echo $"Usage: $0 {start|stop|restart|status}"
    exit 2
esac
exit $?

# chmod +x /etc/init.d/your_prog_name
# chkconfig your_prog_name on

No Comments