启动时启动perl脚本

时间:2013-05-13 09:30:46

标签: perl centos startup

我目前正在尝试启动一个应该在启动时一直运行的perl脚本。

我正在使用CentOS服务器。

我在/etc/rc.d/rc.local中添加了这一行,当我从控制台输入同一行时,脚本无法启动:

perl /svcmon/bin/svcperf.pl --svc fav01svc --interval 5 >> /dev/null &

实际上应该启动此脚本,您必须等待数据库中插入数据的时间,但添加

>> /dev/null/& 

允许您在脚本在后台运行时继续使用您的计算机。

我真的不知道我能做什么,因为我不明白为什么它不起作用......

你知道我能尝试什么吗?

编辑:事实证明,我设法通过这样做正确地启动了我的脚本:

nohup /usr/bin/perl /svcmon/bin/svcperf.pl --svc fav01svc --interval 5 > /outputsvcperf.txt &

但它不起作用,因为PostgreSQL服务器没有及时启动,而它应该在启动时和我的perl脚本之前启动...

2 个答案:

答案 0 :(得分:1)

  1. 在Unix shell(命令工作的位置)中输入命令:“which perl

    这将产生一个输出,为perl二进制文件提供完整路径。比如说它返回“/bin/perl

  2. 在您的rc.local脚本中,将“perl your-command”更改为“/ bin / perl your-command”(基本上用完全限定名称替换Perl)。 (帽子/小贴士@choroba在评论中注意到。)

    这是因为,在命令行中,您设置了$PATH,这使您的Unix shell可以找到驻留在路径中的命令。当RC脚本运行时,shell没有为它们设置PATH,因此不知道在哪里搜索命令。

  3. 顺便提一下,这可能不是问题,而是将“>>/dev/null”更改为“>/dev/null”。您不会附加到空设备,而是输出到它。

  4. 参考文献:

答案 1 :(得分:0)

好的,这就是诀窍:

我创建了一个php脚本,它运行我的命令行并将其放入我的root的crontab中,因此它总是检查脚本是否正在运行,如果没有则运行它。

以下是代码:

#!/usr/bin/php
<?php

    $resultat = shell_exec("ps aux | grep perl");
    if(preg_match("/svcperf.pl/", $resultat)){
        echo "Service déjà en route.";
    }else{
        echo "Service non lancé.";
        echo "\nDémarrage...";
        shell_exec("/usr/bin/perl /svcmon/bin/svcperf.pl --svc fav01svc --interval 5 > /dev/null &");
    }

?>

感谢您的帮助。