【问题标题】:crontab command - execute and than email log file (with 2 options)crontab 命令 - 执行电子邮件日志文件(有 2 个选项)
【发布时间】:2017-08-15 00:23:49
【问题描述】:

我需要每小时运行一次我的 php 代码,而我对 crontab/cronjob 的了解非常糟糕。 我希望脚本每小时运行一次并针对两种情况发送电子邮件:成功和失败。 我写了这段代码,但我不知道它是否对 crontab 有好处(我认为它不起作用):

0 * * * * php <full-path-script>
if [ “$?” = “0” ]; then
echo “Backup Process was Successful. A new log file <filename>.txt has been
created” | mail -s “Backup Status Successful” <email> -A <path>
<filename>.txt
else
echo “Backup Process Failed. Please contact System Administrator.  A new log
file <filename>.txt has been created” | mail -s “Backup Status Failed” 
<email> -A <path><filename>.txt

如果您认为我应该做不同的事情,请解释并告诉我如何做。 顺便说一句 - 我正在使用后缀。

【问题讨论】:

    标签: php email cron crontab cron-task


    【解决方案1】:

    好的,您可以通过同时编写/运行两个 PHP 脚本来解决您的问题。

    1. 已有脚本,只需添加写入文件,以CSV格式写入脚本的开始时间和结束时间。 [每次换行]
    2. 每隔 x 分钟通过解析 CSV 文件的 crontab 运行另一个“守护程序”PHP 脚本,脚本目标是:解析 CSV 文件并搜索有开始时间和没有结束时间的行,如果出现问题则发送电子邮件CSV 文件。

    注意,CSV 文件中的最后一行可以是活动进程,因此请采取您认为应该完成的时间间隔或时间。

    //Create another PHP file / class that sends an email and control it from the php code.
    
    // the message
    $msg = "First line of text\nSecond line of text";
    
    // send email
    mail("someone@example.com","My subject",$msg);
    

    在您的代码中 PHP 会发生什么中断?使用 timeouts/try catch/reties 机制来减少失败。

    【讨论】:

    • 我想过这样做,但是用crontab可以做到吗?因为我需要添加很多 try catch 以确保我的脚本发送带有日志的电子邮件。
    • 感谢您的评论,但我真的很想通过 cronjob 来做。我尝试创建运行我的 php 的 shell 脚本文件并每小时发送电子邮件以获取结果。但不知何故,shell 找不到 php 解释器
    • 这就是为什么你应该把它记录到文件中。
    【解决方案2】:

    好的,这是我为解决我的问题所做的:

    首先 - 确保在 Linux 上编写所有的 shell 脚本(否则你的脚本会被弄乱,你甚至看不到它),你可以使用 vmware 或其他程序来设置你自己的 Linux。

    这是我的 shell 脚本:

    `#!/bin/bash
    /usr/bin/php <full-path-script>
    
    if [ “$?” = “0” ]
    then
    
    echo “Backup Process was Successful. A new log file `date "+\%Y-\%m-\%d-
    \%H"`.txt has been created” | mail -s “Backup Status Successful” <email-
    address> -a <path>`date "+\%Y-\%m-\%d-\%H"`.txt
    
    else
    
    echo “Backup Process Failed. Please contact System Administrator” | mail -s
    “Backup Status Failed” <email-address> -a <path>`date "+\%Y-\%m-\%d-\%H"`.txt
    
    fi`
    

    为了确保您的脚本将错误发送到 $?你应该避免使用 die();关于错误,实际上你应该使用 exit(1); (它会将 1 放入 $? 中,因此我们会知道脚本无法运行)。

    不要忘记制作 cronjob,它将为您执行此脚本并将通知发送到您的电子邮件地址:)

    我希望这对任何人都有帮助!

    【讨论】:

      猜你喜欢
      • 2017-07-14
      • 2014-10-22
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 2018-12-21
      • 2018-10-29
      相关资源
      最近更新 更多