Статьи

Передача імені сайту скрипту через cron (crontab)

Вчора на stackoverflow зауважив   питання   про те, як передати скрипту через крон адреса сайту, якщо скрипт може виконуватися «під різними сайтами» Вчора на stackoverflow зауважив питання про те, як передати скрипту через крон адреса сайту, якщо скрипт може виконуватися «під різними сайтами». Це досить цікаве питання, і є багато варіантів вирішення. Сам вирішував його не так давно, а саме тема интерисует і інших, вирішив про це написати.

Трохи докладніше про сам питанні. Найчастіше зустрічаються сайти, що працюють на одній кодової базі на одному сервері, але, при цьому, на різних доменах. При схожому зовнішньому вигляді на цих сайтах міститься різна інформація в різному дизайні.

Найпростіший приклад таких сайтів - це локалізовані версії одного сайту на різних мовах. У мене в практиці - це тематичні форуми для різних груп.

Поділ цих сайтів зазвичай відбувається через конфіги. Саме конфиг визначає всі деталі, унікальні для кожного сайту.

При запуску обробки користувальницького HTTP-запиту скриптів необхідно визначити, якого саме домену призначений запит, і вибрати відповідний конфиг. В PHP це досить просто зробити: заглянути в змінну $ _SERVER [ 'SERVER_NAME']. В інших мовах програмування під веб, думаю, приблизно так само просто.

На ім'я Серевера визначається потрібний конфіг і звідти беруться всі необхідні настройки. Все просто.

Але коли справа доходить до виклику скриптів з cron-а (або іншого планувальника), то змінна $ _SERVER [ 'SERVER_NAME'] буде порожня. Воно-то й зрозуміло: ніякого сервера немає, скрипт запускається безпосередньо через CLI . І дізнатися, для якого сайту викликається скрипт, без явної передачі домену скрипту неможливо.

Найпростіший спосіб вказати домен - це прописати його аргументом командного рядка. Коли Ви телефонуєте з cron-а після імені скрипта просто пишемо домен, а в коді отримуємо його з змінної $ argv глобальному контексті.

Але цей спосіб не відрізняється елегантністю, тому що доведеться визначати, як запускався сайт: через веб або CLI, і в залежності від цього шукати адресу сайту в різних місцях.

Другий великий мінус такого способу в тому, що прив'язка відбувається безпосередньо по домену, тобто немає гнучкості. Якщо однаковий сайт крутиться на різних доменах, то доведеться каламутити якусь систему алиасов. А це ще зменшує елегантність.

Таким чином шукаємо більш зручний спосіб передати «покажчик» на сайт. І знаходимо: це змінні оточення . Середу оточення інтерпретатор PHP отримує звідти, звідки він був запущений. Якщо скрипт запущений веб-сервером, то змінні будуть отримані від сервера. Якщо запускається скрипт через CLI, то середовище буде отримана від shell-а, в якому проводився запуск. Повторю: запуск скриптів з cron-а - це звичайний запуск виконуваного файлу в режимі CLI.

Тепер до конкретики. Щоб змінна середовища оточення потрапила з веб-сервера в PHP-скрипт (або скрипт / програму, написану на інших мовах), її треба встановити (прописати). Для Апача встановити змінну можна в файлі .htaccess, або в конфігах сервера (httpd.conf або конфіги віртуальних хостів). В ідеалі бажано останнім. Але досить і мінімального рівня доступу до .htaccess. Домагаючись у відповідний конфиг рядок:

SetEnv SITE_NAME site1

Щоб визначити змінну середовища при запуску в режимі CLI (php / filename), потрібно її оголосити і екпортіровать:

export SITE_NAME = site1;

При запуску скрипта вручну за допомогою такої команди можна запускати сам PHP. Якщо запуск проводиться cron-му, то варто створити скрипт, на який посилатися з crontab:

#! / Bin / bash
export SITE_NAME = site1;
php / path

Для інших сайтів замість site1 підставляються інші імена.

Залишається прочитати змінну в скрипті:

echo getenv ( 'SITE_NAME');

Ну а далі, в залежності від значення змінної, довантажувати потрібний конфіг.

* Варто відзначити, що в разі різних «установок» 1 одного і того ж сайту (development, testing, production) прийнято це значення передавати сайту у вигляді теж же змінної оточення. Як правило, конфиг в цьому випадку містить дуже багато інформації, однаковою для всіх «установок», а відрізнятися, наприклад, можуть тільки параметри доступу до БД. Тоді має сенс все установки вважати за один сайт (хоч домени і різні), а відрізняються параметри винести в окремий конфіг, залежний від «установки».

1 - Я наміряв в останньому абзаці замінив термін «оточення додатки» (application environment: тестове, робоче) на «установку», щоб не було плутанини з тим оточенням, де встановлюють змінним.

Новости

Как создать фото из видео
Кризис заставляет искать дополнительные источники дохода. Одним из таких источников может стать торговля на валютном рынке Форекс. Но чтобы не потерять свои деньги необходимо работать с надежным брокером.

Как оформить группу в вконтакте видео
Дано хотел свой магазин в вк, но не знал с чего начать его делать. Так как хотелось не банальный магазин с кучей ссылок и фото, а красиво оформленный. С меню, с аватаркой. После просмотра видео создал

Как оформить диск малыш от рождения до года из фото и видео
Оформить диск "Малыш от рождения до года" из фото и видео можно совершенно разными способами! Кто-то для достижения данной цели идет на шоу-таланты, кто-то пользуется услугами профессионалов, а кто-то

Как создать видео без программ
Реклама - это один из видов деятельности, который помогает людям продвигать свои товары или услуги. Одним из таких видов рекламы является - раздача листовок или более современное название "флаеров". Раздача

Финансовые новости мира
Вернуться в раздел Профессия экономист Экономисты востребованы в компаниях, где требуется контролировать расходы, правильно рассчитывать средства, где необходим постоянный анализ экономической деятельности

Транспортное средство закон
Пункт 1.5. ПДД гласит: «Участники дорожного движения должны действовать таким образом, чтобы не создавать опасности для движения и не причинять вреда», а в пункте 1.2. указано: «Участник дорожного движения»

Квест кімната дніпро
Законопроект о запрете посещения квестов детьми младше 14 лет прокомментировал один из самых популярных в России квест-агрегаторов. Поправки в городской закон о мерах по предупреждению причинения вреда

Труба в изоляции Valsir Pexal
На сегодняшний день имеется масса самых разных отделочных материалов, которые можно использовать, как внутри, так и снаружи помещения в качестве декоративного элемента, однако большинство из них имеет

Роллы
От того, как и чем мы питаемся зависит очень многое. Это и самочувствие и внешность и общее состояние здоровья. Несмотря на широкое предложение, вопросы правильного и вкусного питания стоят очень остро.

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