Запуск php скрипта за розкладом cron

Запуск PHP скрипта за розкладом cron. Коли не все так ясно -4

  • 08.04.15 8:57 •
  • SAlex_S •
  • # 255245 •
  • Хабрахабр •
  • 6 •
  • 2637

- такий же як Forbes, тільки краще.

Запуск php скрипта за розкладом cron

випадок перший


В налаштуваннях операційної системи не вказано шляхи за замовчуванням. Як наслідок наступна команда в cron нічого очікувати виконано.


Правильною командою буде другий варіант, де ми пропишемо повний шлях до інтерпретатора php.


Є ще кілька способів запуску php скрипта описаних тут. Цікавим буде тут те, що php скрипт запускається як файл з командами для консолі і тут можна написати цілу хмару команд і описати всі можливі варіанти на будь-який смак. Код виглядає так.


У команді для виконання в cron прописується шлях до скрипту і тільки. В скрипті ставляться символи #. а далі просто пишемо потрібні нам команди на мові bash.

випадок другий


Виконання скрипта при запиті з браузера призводить до висновку сторінки в браузер. А при виконанні скрипта через cron призводить до висновку тексту сторінки в командний рядок. Тут може бути кілька варіантів. Система може бути налаштована на збереження результатів виведення в консоль у вигляді файлу. Причому файл цей може розташовуватися не в самому типовому місці. Поступово це може забити весь простір на диску. Часто під сайт дають місце в 1 Гігабайт, 500 мегабайт. І навіть зустрічалися хостинги з 50 і 10 мегабайт під сайт.

Рішення старо як світ. Потрібно зробити перенаправлення виведення з консолі в порожнечу. Робиться це додаванням команди в кінці команди крона.


Іноді адміни хостингу беруть на себе обов'язок ненав'язливо поставити їх за користувача. Тут теж може бути підводний камінь.

випадок третій


Ситуація проста. Потрібно налагодити скрипт, який запускається планувальником. Можна спробувати зробити це засобами php, змушувати скрипт писати логії і т.п. Але є спосіб куди простіше, потрібно перенаправити висновок в файл. Команда проста, додатковий параметр до нашої команди:


Її треба додати в кінці команди:


Знак «>» вказує системі про перенаправлення виведення. Далі ім'я файлу. У нашому випадку вказано абсолютний шлях. Цей приклад не складає труднощів знайти в інтернеті. Але тут нас може чекати прикрість, яка випливала з другого випадку. Дбайливий хостер автоматично додає перенаправлення виведення в кінці нашої рядки. І іноді маскує це. У підсумку виходить команда виду:


У підсумку висновок знову перенаправлений в порожнечу і вихідний файл буде порожній. Тут хостера можна вказати на його помилку, що він аж надто перехитрив з настройками. А можна відразу скористатися милицею. Після команди перенаправлення в файл закінчити команду символами . Ці два символи використовуються в командному рядку для об'єднання декількох команд в одному рядку. Вони дають командному рядку зрозуміти, що команда закінчена і далі йде наступна команда. До неї і застосовується перенаправлення в порожнечу. В результаті і перенаправлення в порожнечу залишилося і лог файл записаний вірно. Приклад команди:

випадок четвертий


Скрипт запустився, але працює не вірно. Причиною тому - інтерпретатор php при запуску з командного рядка починає працювати в неправильно налаштованому оточенні, відмінним від того, яке було б при запуску через HTTP-сервер. Перша ознака - скрипт не знаходить файли, які лежать з ним в одній директорії, а починає вважати себе розташованим в кореневій директорії користувача, яка на кілька папок вище ніж корінь сайту. Перше, що потрібно перевірити - змінне оточення і супер глобальний масив $ _SERVER.

Перше, що знаходиш в інтернеті по цій проблемі - рада прописати в кроні команду зміни директорії:


Але в якихось випадках це не допомагає. Вихід є. Один з них взяти все в свої руки і поставити відсутню оточення для роботи скрипта. Інформації про це в інтернеті вже більше.

Іноді просто вистачає вписати наступний код на початку скрипта і шляхи знову стають робочими.


Як бачите, все прописано функціями і напружуватися настройками не треба.

висновок


На цьому все. Проблеми і рішення не тривіальні і взагалі таке поєднання невдалих налаштувань зустрічається рідко. Удачі вам при розгортанні своїх проектів і при переїздах.

Безперечно. Все це можна знайти в специфікаціях.

Але коли справа доходить до конкретного прикладу в ньому опускають багато додаткові параметри. Які в залежності від налаштувань хостингу можуть бути критичними чи ні. Я в програмуванні самоучка і програмую в стилі «копальні паст». Переїзд з одного хостингу на інший змусив понервувати і почитати багато література.

Матеріал буде корисний тим, хто вже пише на php, але не вдається особливо linux і хостингу на ньому.

$ Path_parts = pathinfo ($ _ SERVER [ 'SCRIPT_FILENAME']); // визначаємо директорію скрипта
chdir ($ path_parts [ 'dirname']); // задаємо директорію виконання скрипта Є такі зручні магічні константи. зокрема, __FILE__ і __DIR__