【发布时间】:2015-02-26 17:14:28
【问题描述】:
此脚本在登录时运行,但我无法让它在 cron 作业下运行,有什么想法吗?
如果检测到发送电子邮件所必须的任何图形/视觉差异,此脚本用于监控 web 页面的更改。
我已阅读有关此类问题的其他帖子,并尝试实施一些建议,但我仍然收到错误,即使有更改,我也没有收到电子邮件。 (仅供参考:出于保密目的,电子邮件已更改)
#!/usr/local/cpanel/3rdparty/bin/perl
`SHELL=/bin/bash`;
`PATH=/usr/local/jdk/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin`;
`cd /root/pagechange`;
`rm -f null`;
`wkhtmltoimage --no-images --height 3000 --javascript-delay 7500 http://www.google.com /root/pagechange/sys.jpg`;
`$dif=/usr/bin/compare -metric AE /root/pagechange/sys.jpg /root/pagechange/sys1.jpg null: 2>&1`;
print "1";
if ( $dif == 0 ) {
print "They're equal\n";
} else {
$to = 'me@domain.com';
$from = 'you@domain.com';
$subject = 'Page changes detected ';
$message = "Get to work";
print "2";
open(MAIL, "|/usr/sbin/sendmail -t");
# Email Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
# Email Body
print MAIL $message;
print "3";
close(MAIL);
print "Email Sent Successfully\n";
}
print "4";
`cp /root/pagechange/sys.jpg /root/pagechange/sys1.jpg`;
print "5";
#`rm /root/pagechange/index.html`;
exit
【问题讨论】:
-
无论如何都不能解决您的问题,但看起来使用 Perl 并没有真正为您提供任何优势。也许解决问题的一种方法是简单地使用 shell 脚本。
-
那么当 cron 尝试执行脚本时会发生什么?你得到什么错误?我们无法猜测,您必须告诉我们!检查日志文件!
-
afaik 每个反引号命令都会创建一个新的系统调用/一个新的 shell。所以后来被调用的不会“知道”你之前声明的变量。如果是 bash,您可以
#!/usr/bin/bash --login执行您的个人资料,就像登录设置您的变量“全局”一样。不知道在 perl 中是否可能。在你的情况下,为什么不使用 shell 脚本,因为你使用 perl merley 只是为了执行 shell 命令? -
当你说这个程序“完美无缺”时,我可能会说“无论如何,它确实会产生一些看起来像是在工作的东西,但更有可能是运气和缺乏的结合好的测试用例。”您尝试在反引号命令中分配给
$dif的行只是表明您不了解自己在做什么,如果您认为这行得通,那只是因为您没有使用use strict; use warnings; -
正如@evilive 所说,您不能使用反引号、
qx()或system等系统调用来设置 shell 变量,因为它们每次都会打开一个新的 shell,当命令结束时,这个新的 shell并且它的所有设置都被丢弃。如果这确实有效,那是因为您的 shell 已经以某种方式设置了这些变量。或者您使用的路径和外壳与您想象的不同。但是,您可以通过在%ENV中设置路径来影响路径,例如$ENV{PATH} = " ... "