cron运行php文件,它使用shell_exec和redis-cli

时间:2014-02-22 15:07:40

标签: php bash cron redis

我有一个运行以下内容的cronjob:

* * * * * php /path/to/phpfile.php >> /cronlog.txt

当我在bash中运行php文件时一切正常,但是当cronjob运行它时,一个命令失败:

shell_exec("redis-cli ping");并返回sh: 1: redis-cli: not found

的错误

有谁知道为什么使用PHP shell_exec的cron用户无法使用redis-cli命令?

更新 git diff /env_term.txt /env_cron.txt

-SHELL=/bin/bash
-TERM=screen
-SSH_CLIENT=*************
-SSH_TTY=/dev/pts/0
-USER=root
-LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.
-TERMCAP= { a bunch of giberish }
-PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
-MAIL=/var/mail/root
-STY=*************
-PWD=*************
-LANG=en_US.UTF-8
-HOME=/root
-SHLVL=2
 LANGUAGE=en_US:en
+HOME=/root
 LOGNAME=root
-WINDOW=2
-SSH_CONNECTION=*************
-LESSOPEN=| /usr/bin/lesspipe %s
-LESSCLOSE=/usr/bin/lesspipe %s %s
-_=/usr/bin/env
+PATH=/usr/bin:/bin
+LANG=en_US.UTF-8
+SHELL=/bin/sh
+PWD=*************

3 个答案:

答案 0 :(得分:1)

在调用cron时,您是否检查了PATH变量是否相同? 快速检查是添加一个虚拟cron作业来输出传递给cron的当前环境变量:

* * * * * env > /tmp/env.out

然后将此输出与从终端

运行env命令时进行比较

答案 1 :(得分:0)

试试这个解决方案:

cat cronjob
* * * * * php /path/to/phpfile.php >> /path/to/cronlog.txt

然后:

chmod +x cronjob    
/etc/init.d/crond start  #redhat based servers like centos
/etc/init.d/cron  start  #debian based servers like ubuntu

crontab cronjob

答案 2 :(得分:0)

您可以给出redis-cli的绝对路径,以避免任何与环境变量相关的问题。