linux守护进程start-stop-daemon启动服务

start-stop-daemon

#! /bin/sh

PATH=/sbin:/bin

. /lib/lsb/init-functions

do_start () {
   log_action_msg "do_start tftp here"

   if start-stop-daemon --start --background --pidfile /var/run/tftp.pid \
   --exec /home/zxc/tftp/tftps; then               
      log_action_msg "do_start succ"
      log_end_msg 0 || true
   else
      log_action_msg "do_start error"
      log_end_msg 1 || true
   fi
}

do_stop () {
   log_action_msg "do_stop tftp here"

   if start-stop-daemon start-stop-daemon --stop --name tftps; then
      log_action_msg "do_stop succ"
      log_end_msg 0 || true
   else
      log_action_msg "do_stop error"
      log_end_msg 1 || true
   fi
}

case "$1" in
   start)
      do_start
      ;;
   restart|reload|force-reload)
      echo "Error: argument '$1' not supported" >&2
      exit 3
      ;;
   stop)
      do_stop
      ;;
   status)
      status_of_proc -p /var/run/tftp.pid /home/zxc/tftp/tftps tftps \
      && exit 0 || exit $?
      ;;
   *)
      echo "Usage: $0 start|stop" >&2
      exit 3
      ;;
esac

/var/run/*.pid

#define PID_FILE "/var/run/tftp.pid"

int lock_file(int fd)
{
    struct flock fl;
    fl.l_type = F_WRLCK;
    fl.l_start = 0;
    fl.l_whence = SEEK_SET;
    fl.l_len = 0;

    return (fcntl(fd, F_SETLK, &fl));
}

int alone_runnind(void)
{
    int fd;
    char buf[16];

    fd = open(PID_FILE, O_RDWR | O_CREAT, 0666);
    if (fd < 0)
    {
        perror("open");
        exit(1);
    }

    if (lock_file(fd) < 0)
    {
        if (errno == EAGAIN)
        {
            close(fd);
            printf("alone runnind\n");
            return -1;
        }

        printf("can't lock %s: %s\n", PID_FILE, strerror(errno));
    }

    ftruncate(fd, 0);
    sprintf(buf, "%ld\n", (long)getpid());
    write(fd, buf, strlen(buf));

    close(fd);

    return 0;
}
linux系统命令start-stop-daemon的源码及二进制,其中也提供了一个服务启动脚本模板。 此程序能帮助你实现将命令行程序变成服务运行,比如将"java -jar xxx.jar" 放在后台执行。 ./start-stop-daemon --help start-stop-daemon 1.9.18 for Debian - small and fast C version written by Marek Michalkiewicz , public domain. Usage: start-stop-daemon -S|--start options ... -- arguments ... start-stop-daemon -K|--stop options ... start-stop-daemon -H|--help start-stop-daemon -V|--version Options (at least one of --exec|--pidfile|--user is required): -x|--exec program to start/check if it is running -p|--pidfile pid file to check -c|--chuid change to this user/group before starting process -w|--chdir change the work directory to 'dir' -u|--user | stop processes owned by this user -n|--name stop processes with this name -s|--signal signal to send (default TERM) -a|--startas program to start (default is ) -N|--nicelevel add incr to the process's nice level -b|--background force the process to detach -m|--make-pidfile create the pidfile before starting -R|--retry check whether processes die, and retry -t|--test test mode, don't do anything -o|--oknodo exit status 0 (not 1) if nothing done -q|--quiet be more quiet -v|--verbose be more verbose Retry is |//... where is one of -|[-] send that signal wait that many seconds forever repeat remainder forever or may be just , meaning //KILL/ Exit status: 0 = done 1 = nothing done (=> 0 if --oknodo) 3 = trouble 2 = with --retry, processes wouldn't die
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值