由cron运行时的PHP系统命令

时间:2015-04-11 14:43:52

标签: php linux cron

直接提问 通过cron运行php脚本时,如何在使用exec,system,shell_exec等函数时解释OS(linux)命令。 似乎有时我需要提供完整的路径,如:

   #!/usr/bin/env php
  <?php
    foreach($ips as $insert)
   {
     exec("/sbin/iptables -I INPUT -i eth0 -s {$insert} -j ACCEPT");
     echo 'Allowing ' . $insert . " in iptables\r\n";
   }
  ?>

有时无需提供绝对路径

       #!/usr/bin/env php
  <?php
    foreach($ips as $insert)
   {
     exec("iptables -I INPUT -i eth0 -s {$insert} -j ACCEPT");
     echo 'Allowing ' . $insert . " in iptables\r\n";
   }
  ?>

似乎与cron env pathes有关 使用os命令的相对路径而不是提供完整路径的最佳方法是什么? 是否像

一样运行脚本
0 0 * * * /usr/bin/php /scripts/iptables.php

对ENV变量路径有什么不同? 使用绝对路径使脚本更难以在不同的操作系统和发行版上工作

1 个答案:

答案 0 :(得分:0)

所有cronjobs都在非常有限的环境中运行,而大多数环境变量实际上并未设置。这包括PATH变量,这就是您通常需要指定在cron作业期间运行的所有命令的完整路径的原因。

您可以通过在您的cron作业声明之上设置PATH环境变量来解决此问题。这是一个例子:

PATH="/sbin:/usr/bin"
0 0 * * * /usr/bin/php /scripts/iptables.php

您可以找到更多信息here