我有这个PHP代码:
<?php
define('ORACLE_SID', 'MYDB');
define('ORACLE_HOME', '/usr/lib/oracle/11.2/client');
shell_exec('ORACLE_SID=' . ORACLE_SID);
shell_exec('export ORACLE_SID');
shell_exec('ORACLE_HOME=' . ORACLE_HOME);
shell_exec('export ORACLE_HOME');
putenv("ORACLE_HOME=".ORACLE_HOME);
putenv("ORACLE_SID=".ORACLE_SID);
$path = shell_exec('echo $PATH');
$oracle_home = shell_exec('echo $ORACLE_HOME');
$abs_path = str_replace("\n","",$path. ":" .$oracle_home . "/bin");
putenv("PATH=".$abs_path);
echo exec('sqlplus MYUSER/MYPASS@MYDB @/absolute/route/to/script.sql');
?>
这里我导出所有环境变量以运行sqlplus命令。当我从line命令执行它时它工作正常,但是当“cron”执行它时,它不会运行sqlplus命令。
我通过在变量上运行“echos”检查了cron上的“exports”部分,它似乎工作正常。我也尝试运行sqlplus命令添加其绝对路径,但它也不起作用...
crontab中的相应行:
*/5 * * * * /usr/bin/php /home/myusr/script.php >> /home/myusr/out.txt
有人知道我错过了什么吗?
提前多多感谢
答案 0 :(得分:0)
我找到了一个解决方案:从cron执行,但加载了在同一条指令中获得正确配置文件的用户的环境。
*/5 * * * * su - myusr -c '/usr/bin/php /home/myusr/script.php'
“myusr”的.profile必须设置所有必要的环境变量。
我不确切地知道它为什么不加载执行句子中的句子的环境变量(我甚至尝试从脚本中调用“.profile”,它也不起作用),如果不好的话有人可以给我们一些启示:)
谢谢