首页 > 解决方案 > 将 perl 脚本作为守护进程运行时的 PID 文件问题

问题描述

我尝试使用此处给出的示例将 perl 脚本作为守护进程运行:

但是,当尝试启动守护程序时,我收到以下错误:systemd 1 : myDaemon.service: Can't open PID file /run/myDaemon.pid (yet?) after start: Operation not allowed

我发现了其他几个遇到此问题的人,但没有一个建议的修复,例如将 pid 位置从 /var/run 更改为 /run,对我有用。有什么建议么?

以下是 /etc/init.d/myDaemon 的内容:

#!/bin/bash
#
# myDaemon This starts and stops myDaemon 
#
# chkconfig: 2345 12 88
# description: myDaemon is a perl script that does stuff
# processname: myDaemon
# pidfile: /run/myDaemon.pid
### BEGIN INIT INFO
# Provides: $myDaemon
### END INIT INFO

# Source function library.
. /lib/lsb/init-functions

binary="/home/myuser/myDaemon.pl"

[ -x $binary ] || exit 0

RETVAL=0

start() {
    echo -n "Starting myDaemon: "
    daemon $binary
    RETVAL=$?
    PID=$!
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/myDaemon

    echo $PID > /run/myDaemon.pid
}

stop() {
    echo -n "Shutting down myDaemon: "
    killproc myDaemon
    RETVAL=$?
    echo
    if [ $RETVAL -eq 0 ]; then
        rm -f /var/lock/subsys/myDaemon
        rm -f /run/myDaemon.pid
    fi
}

restart() {
    echo -n "Restarting myDaemon: "
    stop
    sleep 2
    start
}

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    status)
        status myDaemon
    ;;
    restart)
        restart
    ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
    ;;
esac

exit 0

以下是/home/myUser/myDaemon.pl下perl脚本的相关内容:

    #! /usr/bin/perl
    use strict;
    use warnings;
    use Proc::Daemon;
    
    # Proc::Daemon
    Proc::Daemon::Init;
    my $continue = 1;
    $SIG{TERM} = sub { $continue = 0 };


while($continue) {
  # does stuff
}

标签: linuxperldaemon

解决方案


推荐阅读