0

我目前正在尝试启动一个应该在启动时一直运行的 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 脚本之前启动......

4

2 回答 2

2
  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”。您不会附加到空设备,而是输出到它。

参考:

于 2013-05-13T09:58:18.383 回答
0

好的,这是诀窍:

我创建了一个 php 脚本,它运行我的命令行并将其放入我的根目录的 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 &");
    }

?>

谢谢您的帮助。

于 2013-05-13T13:01:35.247 回答