【问题标题】:PHP code not executing in cron jobPHP代码未在cron作业中执行
【发布时间】:2018-08-24 05:43:50
【问题描述】:

我有一个 php 脚本,它将获取所有网卡的 mac 地址并将第一个存储在文本文件中。 这是我用来获取系统MAC的代码:

<?php
$mycom = shell_exec("ifconfig | grep HWaddr");
$findVal = "HWaddr";
$mac_arry = array();

while (strpos($mycom, $findVal) > 0) {
    $start_pos = strpos($mycom, $findVal);
    $mac=substr($mycom,($start_pos+7),17);
    $mac_arry[] = $mac;
    $mycom = substr($mycom, ($start_pos+10));
}

$fileHandle = fopen("/tmp/mac.txt", "a+");
fwrite($fileHandle, $mac_arry[0]);
fclose($fileHandle);
?>

如果我直接在浏览器中或通过终端执行此文件,它会完美运行。但是当我每分钟将它添加到 cron 时,它就不起作用了。这是我的 cronjob:

* * * * * /usr/bin/php -f /var/www/html/test.php

【问题讨论】:

  • 执行cron的用户是否有读/写/tmp目录的权限?
  • ... 或执行ifconfig
  • 我将 cron 添加为 root 用户,我认为 root 用户有权限
  • cron 作业在与您在终端中获得的环境截然不同的环境中执行。 $PATH 变量的内容较短,可能不包括 /sbinifconfig 通常保留的位置)。这使得shell_exec() 调用失败,脚本的其余部分无关紧要。使用which ifconfig(在终端中)找出ifconfig 在您的系统上的位置,并使用shell_exec() 中的绝对路径调用它。 grep 也是如此(即使没有完整路径也可能找到,因为它通常保留在 /bin。)
  • 非常感谢@axiac。你拯救了我的一天。它解决了我的问题。请张贴并回答所有这些

标签: php cron cron-task


【解决方案1】:

axiac

cron 作业在与您在终端中获得的环境非常不同的环境中执行。 $PATH 变量的内容更短,可能不包括/sbinifconfig 通常保留的位置)。这使得shell_exec() 调用失败,脚本的其余部分无关紧要。使用 which ifconfig(在终端中)找出 ifconfig 在您的系统上的位置,并使用其在 shell_exec() 中的绝对路径调用它。 grep 也是一样(即使没有完整路径也可能找到,因为它通常位于/bin。)

【讨论】:

    猜你喜欢
    • 2014-04-24
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2014-04-16
    • 2012-03-04
    • 2013-08-31
    相关资源
    最近更新 更多