2012-06-17 3 views
0

Некоторые настройки фона первой:PHP Cronjob изменения ш корень

  • У меня есть cronjob, который работает на PHP файл с именем worker_cronjob. Все файл не является скачать мой работника от мерзавца и cronjob в cron.d выглядит следующим образом:

    */1 * * * * убунт/дома/убунт/worker_cronjob >> /home/ubuntu/worker.log

  • Она включает в себя файл worker_despatcher

  • , который выстреливает дочерний процесс с (ROOT будучи путь abolsute в мой каталог):

    $ PID = Exec (Sprintf ("% s>% s 2> echo $! "," Php ".ROOT."/Worker/encoder.php ". $ Arg_string, ROOT."/Worker/encoder.log "));

Проблема в том, что под кроной этот метод изменяет способ запуска системных команд, а точнее sh. Поэтому, когда я запускаю команду как:

ffmpeg 

возвращает:

sh: 1: ffmpeg: command not found 

После проб и ошибок я обнаружил, что это происходит только из cronjob, каким-то образом это меняет способ директории установки, много как chrooting без меня, вызывающего chroot.

Я смотрел другие темы, и он говорит, что использует полные пути при создании cronjobs и запущенных файлов, однако это не мои файлы, и это все проблемы, и все они ссылаются через абсолютные пути, он запускает установленные программы, где я получаю проблемы ,

Используется ли абсолютный путь к установленным приложениям или есть способ нарушить эту функциональность, чтобы вернуть мне возможность просто запустить команду одним словом?

+3

использование также абсолютный путь к команде FFmpeg и посмотреть, что происходит –

+2

Создать Баш скрипт, который вызывается в cronjob линии. Таким образом, вы можете более легко настроить способ запуска ffmpeg, и вы можете симулировать, что происходит, когда он вызывается root или каким-либо другим пользователем в какой-либо другой оболочке с другой средой и всем этим. – hakre

+0

Действительно, мне кажется, что мне нужно будет сделать что-то подобное, поскольку с помощью абсолютных путей по всему скрипту PHP вызывать это просто противно. Но да, используя абсолютные пути, работало, лично очень странное поведение, на мой взгляд, спасибо за помощь :) – Sammaye

ответ

1

Поводом является то, что cronjobs управляются системой, поэтому они ничего не знают о ваших переменных оболочки оболочки или пользователя. Вы можете сказать, что они работают в минимальной среде .

Подробный подробный ответ можно найти в Reasons why crontab does not work.

Другой способ не показано выше ресурса ссылка:

* * * * * PATH=/usr/bin; command >> /var/log/command.log 
+0

А хороший ответ Я знал, что это относится к файлам, а что нет, но я всегда думал, что есть что-то особенное в приложениях, похоже, не спасибо :) – Sammaye