我目前正在尝试启动一个应该在启动时一直运行的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脚本之前启动...
答案 0 :(得分:1)
在Unix shell(命令工作的位置)中输入命令:“which perl
”
这将产生一个输出,为perl二进制文件提供完整路径。比如说它返回“/bin/perl
”
在您的rc.local脚本中,将“perl your-command”更改为“/ bin / perl your-command”(基本上用完全限定名称替换Perl)。 (帽子/小贴士@choroba在评论中注意到。)
这是因为,在命令行中,您设置了$PATH
,这使您的Unix shell可以找到驻留在路径中的命令。当RC脚本运行时,shell没有为它们设置PATH,因此不知道在哪里搜索命令。
顺便提一下,这可能不是问题,而是将“>>/dev/null
”更改为“>/dev/null
”。您不会附加到空设备,而是输出到它。
参考文献:
答案 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 &");
}
?>
感谢您的帮助。