正在运行cron作业.我所有的测试和尝试都在风向标上


Running a cron job. All my tests and tries were in vane

这是我第一次运行cron作业。我在亚马逊的Ubuntu 14.04.2 LTS虚拟机上做这件事。

这是我的crontab -e:的文件

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
*/1 * * * * root /usr/bin/php /var/www/html/testimages/script.php

好吧,这就是我到目前为止所尝试的,我正在列出一个列表,这样无论谁可能对cron工作有问题,都可以检查之前该做什么:

  • 修改ubuntu用户的crontab和root用户的crontab
  • 在末尾留一行空白
  • * * * * * root /usr/bin/php /var/www/html/testimages/script.php
  • * * * * * ubuntu /usr/bin/php /var/www/html/testimages/script.php
  • * * * * * /usr/bin/php /var/www/html/testimages/script.php
  • * * * * * php /var/www/html/testimages/script.php
  • * * * * * "php /var/www/html/testimages/script.php"
  • 所有这些,但将第一个*替换为*/1
  • 将权限设置为755script.php
  • 重新启动cron
  • 在以下内容的script.php上添加标题行:#!/usr/local/bin/php -q

当我键入grep CRON /var/log/syslog时,我可以看到:

10月27日15:32:01 ip-172-31-1-104 CRON[1184]:(root)CMD(root/usr/bin/php/var/www/html/testimages/script.php)

10月27日15:33:01 ip-172-31-1-104 CRON[1520]:(root)CMD(root/usr/bin/php/var/www/html/testimages/script.php)

10月27日15:34:01 ip-172-31-1-104 CRON[1849]:(root)CMD(root/usr/bin/php/var/www/html/testimages/script.php)

10月27日15:35:01 ip-172-31-1-104 CRON【2188】:(root)CMD(root/usr/bin/php/var/www/html/testimages/script.php)

10月27日15:36:01 ip-172-31-1-104 CRON[2513]:(root)CMD(root/usr/bin/php/var/www/html/testimages/script.php)

10月27日15:37:01 ip-172-31-1-104 CRON[2840]:(root)CMD(root/usr/bin/php/var/www/html/testimages/script.php)

10月27日15:38:01 ip-172-31-1-104 CRON[3165]:(root)CMD(root/usr/bin/php/var/www/html/testimages/script.php)

10月27日15:39:01 ip-172-31-1-104 CRON[394]:(root)CMD(root/usr/bin/php/var/www/html/testimages/script.php)

该脚本基本上执行代码并发送电子邮件,当我在命令行上键入php /var/www/html/testimages/script.php时,这一点做得很好,但当在cron中设置时,我不会收到邮件。

我做错了什么?

非常感谢。

谨致问候。

拉斐尔。


编辑

这是我试图运行的php文件

#!/usr/local/bin/php -q
<?php
    echo '<script>!function(e){function t(e,t){var n=new Image,r=e.getAttribute("data-src");n.onload=function(){e.parent?e.parent.replaceChild(n,e):e.src=r,t?t():null},n.src=r}function n(t){var n=t.getBoundingClientRect();return n.top>=0&&n.left>=0&&n.top<=(e.innerHeight||document.documentElement.clientHeight)}for(var r=function(e,t){if(document.querySelectorAll)t=document.querySelectorAll(e);else{var n=document,r=n.styleSheets[0]||n.createStyleSheet();r.addRule(e,"f:b");for(var l=n.all,c=0,o=[],i=l.length;i>c;c++)l[c].currentStyle.f&&o.push(l[c]);r.removeRule(0),t=o}return t},l=function(t,n){e.addEventListener?this.addEventListener(t,n,!1):e.attachEvent?this.attachEvent("on"+t,n):this["on"+t]=n},c=new Array,o=r("img.lazy"),i=function(){for(var e=0;e<c.length;e++)n(c[e])&&t(c[e],function(){c.splice(e,e)})},u=0;u<o.length;u++)c.push(o[u]);i(),l("scroll",i)}(this);</script>'
    
    echo '<style>table, th, td {border: 1px solid black;    border-collapse: collapse;}th, td {padding: 15px;}th {    text-align: left;    background-color: #666666;}</style>';
    
    require '/var/www/html/libraries/mail/PHPMailerAutoload.php';
    require '/var/www/html/libraries/myLibrary/core.php';
    $mail = new PHPMailer;
    
    
    $to = "example@gmail.com";
    ob_start();
    
    function echoText($text) {
        echo $text;
    }
    
    $show_json = $_GET['show_json'];
    
    echoContent(); // belongs to the core
        
        
    // send email
    
    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'example@gmail.com';                 // SMTP username
    $mail->Password = 'secret';                           // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                    // TCP port to connect to
    
    $mail->setFrom('example@gmail.com', 'Watchdog - Rafael');
//        $mail->addAddress('joe@example.net', 'Joe User');     // Add a recipient
    $mail->addAddress($to);
//        $mail->addReplyTo('info@example.com', 'Information');
//        $mail->addBCC('bcc@example.com');
    
//        $mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
//        $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
    $mail->isHTML(true);                                  // Set email format to HTML
    
    $mail->Subject = 'Test on database';
    $contents = ob_get_contents();
    $mail->Body    = $contents;
    
    
//        $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    
    if(!$mail->send()) {
        echo 'Message could not be sent.';
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        echo 'Message has been sent';
    }
    print_r(error_get_last());
    
}
    
?>

编辑:我正在尝试设置一个bash脚本来运行它,甚至将结果导出到一个log.txt…log.txt为空。

您的问题出现在php脚本的第1行,缺少终止;

您发布的CRON系统日志显示CRON正在运行该脚本。你收到的电子邮件很可能来自克朗,而不是你的剧本。不幸的是,你的脚本的工作是发送电子邮件,但你的脚本不会发送给本地用户"ubuntu"。

如果你读了这些邮件(你应该读!),你可能会发现错误。

该脚本要么有错误,要么没有,要么已运行,要么未运行。根据php(-cli).ini的配置,您可能没有得到任何错误报告,从而导致您认为脚本是可以的。语法就是语法。

不存在所谓的"最小错误"。如果你侥幸逃脱,我们称之为"功能";)

我发现系统向我发送的邮件如下:

你在/var/mail/uuntu 上收到了一封新邮件

我忽略了它们,因为我可以在命令行上执行脚本,所以我认为没有任何错误。但他们是(;)。。。因此,如果出现最小错误,命令行将执行脚本,但不会执行cron。事情就是这样。