Назад | Перейти на главную страницу

Разница в запуске скриптов вручную или с помощью cronjob

У меня есть PHP-скрипт, который я хочу запускать каждые 10 минут, просматривая записи базы данных и создавая / редактируя фильмы через MEncoder. Для этого я настроил задание cron, но оно работает не очень хорошо.

У меня есть сценарий PHP, назовите его document.php. У меня также есть сценарий bash (document.sh) для вызова этого сценария PHP;

#!/bin/bash
php document.php

А теперь самое странное: когда я вручную запускаю сценарий bash, все работает отлично - фильмы создаются или редактируются так, как я хочу, - но когда я позволяю заданию cron запускать сценарий bash каждые 10 минут, фильмы повреждаются. Хотя в них есть какие-то рамки. Я понятия не имею, как это может случиться. Я проверил разрешения и пути к файлам, все в порядке. Убивает ли работа cron мой процесс? Есть ли у него ограничение по времени (на запуск MEncoder через файлы требуется примерно 1-2 минуты)?

Надеюсь, кто-то сможет дать ответ - меня это действительно беспокоит, и срок уже близок.

Я использую Ubuntu Server с последними обновлениями и последней версией MEncoder из репозитория.

С уважением, Бьёрн

Запуск из cron не включает файлы конфигурации вашей оболочки (~ / .bashrc, ~ / .profile или / etc / profile). Возможно ли, что там определены переменные среды, которые влияют на вашу работу? Попробуйте получить файлы своего профиля вручную в начале сценария. (. /path/to/profile)

Это очень распространенная проблема с cronjobs - вы просто не можете предполагать переменные среды, пути и т. Д. Мне нравится иметь задание cron, которое делает "set > /tmp/set" так что вы можете точно видеть, что вы собираетесь получить с точки зрения cronjob. Таким образом вы можете сравнить предположения, сделанные вашим скриптом, и то, какие корректировки необходимо внести.

Мое простое решение - вызвать файл php с помощью LYNX. Предполагая, что у вас запущен http-сервер.

рысь http://127.0.0.1/document.php

Ограничений по времени быть не должно - по крайней мере, по умолчанию, не уверен в этом дистрибутиве. Вы получаете электронное письмо cron? Если нет, перенаправьте stdin / stdout в файл и посмотрите, что говорит процесс.

your-cmd  > filename.txt 2>&1

Как заявляли другие, наиболее вероятной проблемой номер один является отсутствие некоторых переменных среды. Если это не так, я могу придумать еще одну возможность: вы уверены, что работа займет всего 1-2 минуты? если требуется> 10 (ваш интервал для его возрождения), вы можете выполнить несколько запусков, пытающихся изменить одни и те же файлы, что может вызвать некоторые из упомянутых вами повреждений.

Отладка cron - это всегда ... весело. во-первых, проверьте электронную почту root в этой системе; если задание cron помещает что-либо в stdout, оно должно быть там. Если ничего полезного там не обнаружилось, можно делать что-то появляется там, помещая некоторые отладочные данные в ваш скрипт.