将 perl 脚本作为守护程序运行时的 PID 文件问题

问题描述

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

但是,在尝试启动守护程序时,我收到以下错误: systemd1: myDaemon.service: 启动后无法打开 PID 文件 /run/myDaemon.pid (yet?): 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
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)