Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cron运行使用shell_exec和redis cli的php文件_Php_Bash_Cron_Redis - Fatal编程技术网

cron运行使用shell_exec和redis cli的php文件

cron运行使用shell_exec和redis cli的php文件,php,bash,cron,redis,Php,Bash,Cron,Redis,我有一个cronjob,它运行以下操作: ***php/path/to/phpfile.php>/cronlog.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

我有一个cronjob,它运行以下操作:

***php/path/to/phpfile.php>/cronlog.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=*************
当我在bash中运行php文件时,一切正常,但当cronjob运行它时,有一个命令失败:

shell_exec(“redis cli ping”)
并返回一个错误
sh:1:redis cli:not found

有人知道为什么使用PHP
shell\u 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=*************

调用cron时是否检查了PATH变量是否相同。 快速检查是添加一个伪cron作业,以输出传递给cron的当前环境变量:

* * * * * env > /tmp/env.out
然后将此输出与从终端运行env命令时的输出进行比较

尝试以下解决方案:

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


您可以提供redis cli的绝对路径,以避免与环境变量相关的任何此类问题。

谢谢!我在这两个输出上运行了一个git diff,并将其添加到我的问题中。
which redis_cli
为您提供了什么输出
which redis cli
=
/usr/local/bin/redis cli
确定,因此您需要将/usr/local/bin添加到PATH变量中。有很多方法可以做到这一点。您可以在php脚本、运行cron的用户帐户的配置文件中执行此操作,或者将其添加到crontab的顶部。
chmod:无法访问“cronjob”:没有这样的文件或目录
cronjob:没有这样的文件或目录
您应该打开一个名为它的文本编辑器文件
cronjob
,然后编写
***php/path/to/phpfile.php>/path/to/cronlog.txt