Cron работает PHP-файл, который использует shell_exec и Redis-Cli

1

У меня есть cronjob, который запускает следующее:

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

когда я запускаю php файл в bash, все работает, но когда запускается cronjob, одна команда терпит неудачу:

shell_exec("redis-cli ping"); и возвращает ошибку sh: 1: redis-cli: not found

Кто-нибудь знает, почему пользователь cron, использующий PHP shell_exec, не сможет использовать команду 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
redis

3 ответа

1

Вы проверяли, является ли ваша переменная PATH одинаковой при вызове cron. Быстрая проверка заключается в том, чтобы добавить фиктивное задание cron для вывода текущих переменных среды, переданных в cron:

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

И затем сравните этот результат с тем, когда вы запустите команду env с терминала

  • 0
    Спасибо! Я запустил git diff на двух выходах и добавил его к своему вопросу.
  • 0
    Ну и пути перемены разные. Какой вывод дает which redis_cli
Показать ещё 3 комментария
0

Вы можете дать абсолютный путь redis-cli, чтобы избежать такой проблемы, связанной с переменной окружения.

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
  • 0
    что это делает?
  • 0
    chmod: cannot access 'cronjob': No such file or directory и cronjob: No such file or directory
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню