直接提问 通过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变量路径有什么不同? 使用绝对路径使脚本更难以在不同的操作系统和发行版上工作
答案 0 :(得分:0)
所有cronjobs都在非常有限的环境中运行,而大多数环境变量实际上并未设置。这包括PATH变量,这就是您通常需要指定在cron作业期间运行的所有命令的完整路径的原因。
您可以通过在您的cron作业声明之上设置PATH环境变量来解决此问题。这是一个例子:
PATH="/sbin:/usr/bin"
0 0 * * * /usr/bin/php /scripts/iptables.php
您可以找到更多信息here。