Error[8]: Undefined offset: 6, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我有一个我想要守护的Perl脚本.基本上这个perl脚本每隔30秒读取一个目录,读取它找到的文件,然后处理数据.为了简单起见,请考虑以下Perl脚本(称为synpipe_server,在/usr/sbin /中有此脚本的符号链接): #!/usr/bin/perluse strict;use warnings;my $continue = 1;$SIG{'TERM'} = sub { 我有一个我想要守护的Perl脚本.基本上这个perl脚本每隔30秒读取一个目录,读取它找到的文件,然后处理数据.为了简单起见,请考虑以下Perl脚本(称为synpipe_server,在/usr/sbin /中有此脚本的符号链接):
#!/usr/bin/perluse strict;use warnings;my $continue = 1;$SIG{'TERM'}  = sub { $continue = 0; print "Caught TERM signal\n"; };$SIG{'INT'} = sub { $continue = 0; print "Caught INT signal\n"; };my $i = 0;while ($continue) {     #do stuff     print "Hello,I am running " . ++$i . "\n";     sleep 3;}

所以这个脚本基本上每3秒打印一次.

然后,因为我想守护这个脚本,我也把这个bash脚本(也称为synpipe_server)放在/etc/init.d/中:

#!/bin/bash# synpipe_server : This starts and stops synpipe_server## chkconfig: 12345 12 88# description: Monitors all production pipelines# processname: synpipe_server# pIDfile: /var/run/synpipe_server.pID# Source function library.. /etc/rc.d/init.d/functionspname="synpipe_server"exe="/usr/sbin/synpipe_server"pIDfile="/var/run/${pname}.pID"lockfile="/var/lock/subsys/${pname}"[ -x $exe ] || exit 0RETVAL=0start() {    echo -n "Starting $pname : "    daemon ${exe}    RETVAL=$?    PID=$!    echo    [ $RETVAL -eq 0 ] && touch ${lockfile}    echo $PID > ${pIDfile}}stop() {    echo -n "Shutting down $pname : "    killproc ${exe}    RETVAL=$?    echo    if [ $RETVAL -eq 0 ]; then        rm -f ${lockfile}        rm -f ${pIDfile}    fi}restart() {    echo -n "Restarting $pname : "    stop    sleep 2    start}case "" in    start)        start    ;;    stop)        stop    ;;    status)        status ${pname}    ;;    restart)        restart    ;;    *)        echo "Usage: 
service synpipe_server start
{start|stop|status|restart}" ;; esacexit 0

所以,(如果我已经很好地理解了守护进程的文档),Perl脚本应该在后台运行,如果我执行,输出应该重定向到/ dev / null:

[root@master init.d]# service synpipe_server startStarting synpipe_server : Hello,I am running 1Hello,I am running 2Hello,I am running 3Hello,I am running 4Caught INT signal                                                           [  OK  ][root@master init.d]#

但这是我得到的:

ScIEntific linux SL release 5.4 (Boron)

所以它启动Perl脚本但运行它而不将它从当前的终端会话中分离出来,我可以看到我的控制台中打印的输出……这实际上并不是我所期待的.此外,PID文件为空(或仅使用换行符,守护程序不返回pID).

有谁知道我做错了什么?

编辑:也许我应该说我在Red Hat机器上.

nohup ${exe} >/dev/null 2>&1 &

如果不使用守护进程函数,我会使用类似的东西吗?

[+++]

在init脚本中?

解决方法 我建议您直接守护perl脚本,而不是添加redhat init脚本守护程序函数的额外层.如果您尝试自己编写守护进程,很难让守护进程正确. Proc::Daemon非常简单.

另外,这是对how to write perl daemons的讨论.

额外答案:使用daemontools和Proc::Daemontools.这提供了一个全面的守护程序管理系统,您可能已经安装了daemontools.有些人不喜欢daemontools,但它完成了工作.

无论我写多少次守护进程仍然看起来很怪异.也许我应该使用dæmon.

总结

以上是内存溢出为你收集整理的linux – 在/etc/init.d脚本中调用守护进程是阻塞的,而不是在后台运行全部内容,希望文章能够帮你解决linux – 在/etc/init.d脚本中调用守护进程是阻塞的,而不是在后台运行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
linux – 在etcinit.d脚本中调用守护进程是阻塞的,而不是在后台运行_系统运维_内存溢出

linux – 在etcinit.d脚本中调用守护进程是阻塞的,而不是在后台运行

linux – 在etcinit.d脚本中调用守护进程是阻塞的,而不是在后台运行,第1张

概述我有一个我想要守护的Perl脚本.基本上这个perl脚本每隔30秒读取一个目录,读取它找到的文件,然后处理数据.为了简单起见,请考虑以下Perl脚本(称为synpipe_server,在/usr/sbin /中有此脚本的符号链接): #!/usr/bin/perluse strict;use warnings;my $continue = 1;$SIG{'TERM'} = sub { 我有一个我想要守护的Perl脚本.基本上这个perl脚本每隔30秒读取一个目录,读取它找到的文件,然后处理数据.为了简单起见,请考虑以下Perl脚本(称为synpipe_server,在/usr/sbin /中有此脚本的符号链接):
#!/usr/bin/perluse strict;use warnings;my $continue = 1;$SIG{'TERM'}  = sub { $continue = 0; print "Caught TERM signal\n"; };$SIG{'INT'} = sub { $continue = 0; print "Caught INT signal\n"; };my $i = 0;while ($continue) {     #do stuff     print "Hello,I am running " . ++$i . "\n";     sleep 3;}

所以这个脚本基本上每3秒打印一次.

然后,因为我想守护这个脚本,我也把这个bash脚本(也称为synpipe_server)放在/etc/init.d/中:

#!/bin/bash# synpipe_server : This starts and stops synpipe_server## chkconfig: 12345 12 88# description: Monitors all production pipelines# processname: synpipe_server# pIDfile: /var/run/synpipe_server.pID# Source function library.. /etc/rc.d/init.d/functionspname="synpipe_server"exe="/usr/sbin/synpipe_server"pIDfile="/var/run/${pname}.pID"lockfile="/var/lock/subsys/${pname}"[ -x $exe ] || exit 0RETVAL=0start() {    echo -n "Starting $pname : "    daemon ${exe}    RETVAL=$?    PID=$!    echo    [ $RETVAL -eq 0 ] && touch ${lockfile}    echo $PID > ${pIDfile}}stop() {    echo -n "Shutting down $pname : "    killproc ${exe}    RETVAL=$?    echo    if [ $RETVAL -eq 0 ]; then        rm -f ${lockfile}        rm -f ${pIDfile}    fi}restart() {    echo -n "Restarting $pname : "    stop    sleep 2    start}case "" in    start)        start    ;;    stop)        stop    ;;    status)        status ${pname}    ;;    restart)        restart    ;;    *)        echo "Usage: 
service synpipe_server start
{start|stop|status|restart}" ;; esacexit 0

所以,(如果我已经很好地理解了守护进程的文档),Perl脚本应该在后台运行,如果我执行,输出应该重定向到/ dev / null:

[root@master init.d]# service synpipe_server startStarting synpipe_server : Hello,I am running 1Hello,I am running 2Hello,I am running 3Hello,I am running 4Caught INT signal                                                           [  OK  ][root@master init.d]#

但这是我得到的:

ScIEntific linux SL release 5.4 (Boron)

所以它启动Perl脚本但运行它而不将它从当前的终端会话中分离出来,我可以看到我的控制台中打印的输出……这实际上并不是我所期待的.此外,PID文件为空(或仅使用换行符,守护程序不返回pID).

有谁知道我做错了什么?

编辑:也许我应该说我在Red Hat机器上.

nohup ${exe} >/dev/null 2>&1 &

如果不使用守护进程函数,我会使用类似的东西吗?

在init脚本中?

解决方法 我建议您直接守护perl脚本,而不是添加redhat init脚本守护程序函数的额外层.如果您尝试自己编写守护进程,很难让守护进程正确. Proc::Daemon非常简单.

另外,这是对how to write perl daemons的讨论.

额外答案:使用daemontools和Proc::Daemontools.这提供了一个全面的守护程序管理系统,您可能已经安装了daemontools.有些人不喜欢daemontools,但它完成了工作.

无论我写多少次守护进程仍然看起来很怪异.也许我应该使用dæmon.

总结

以上是内存溢出为你收集整理的linux – 在/etc/init.d脚本中调用守护进程是阻塞的,而不是在后台运行全部内容,希望文章能够帮你解决linux – 在/etc/init.d脚本中调用守护进程是阻塞的,而不是在后台运行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1043480.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存