linux - 将 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
}
解决方案
推荐阅读
- reactjs - 在渲染到屏幕之前对内存中的视频加载做出反应
- ruby-on-rails - 无法在 Heroku 上的 R 中写入绘图的 png
- php - Laravel 从分页中获取所有项目的数据
- excel - Excel中具有3个条件的嵌套IF语句
- ionic-framework - 每次对模板或代码进行更改时,如何更新我的 apk?
- php - 使用 symfony 和 FOSUserBundle 在登录失败时覆盖 BadCredentialsException
- javascript - ReactJS - 关于在灯箱组件中插入动态内容的问题
- odoo-9 - 从 Odoo 应用程序下载 Excel 报告
- c# - LINQ - 分组,然后有条件地求和
- javascript - VTK.js VR 不在 Room 中显示/显示手控制器