【发布时间】: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变量的内容较短,可能不包括/sbin(ifconfig通常保留的位置)。这使得shell_exec()调用失败,脚本的其余部分无关紧要。使用which ifconfig(在终端中)找出ifconfig在您的系统上的位置,并使用shell_exec()中的绝对路径调用它。grep也是如此(即使没有完整路径也可能找到,因为它通常保留在/bin。) -
非常感谢@axiac。你拯救了我的一天。它解决了我的问题。请张贴并回答所有这些