Интеграция php в сценарии оболочки для cronjob?

Я хотел бы выполнять cronjob для рутинной задачи каждые X часов. Cronjob в основном выполняет сценарий оболочки, который, в свою очередь, использует команду WGET для загрузки файлов с удаленного сервера. Однако перед запуском этого сценария оболочки я хочу, чтобы cronjob выполнил сценарий php, который проверит, доступно ли обновление (нет смысла тратить BW и загружать один и тот же файл снова и снова), и если это так, он должен передать URL-адрес обновления сценария оболочки, который, в свою очередь, использует команду WGET.

Задания cron устанавливаются из панели администратора хоста. Другого пути нет. Будучи службой общего хостинга, мне не разрешен доступ к другим функциям на PHP, которые также могут выполнять эту задачу за меня.

Это возможно? Я линукс неграмотный. Я установил несколько RPM на Fedora, но это все. Пожалуйста, потерпите меня. Спасибо!


person captainspi    schedule 06.09.2012    source источник


Ответы (1)


Просто передайте --timestamping вашей команде wget.

В качестве альтернативы, если вы больше знакомы со способами PHP, вы можете проверить этот вопрос за полезный метод.

Используйте запрос curl HEAD, чтобы получить заголовки файла и проанализировать заголовок Last-Modified:.

Чтобы использовать php-скрипт в качестве обычного исполняемого файла командной строки, используйте это в качестве отправной точки:

#!/bin/env php
<?php
echo "Hello World\n";

Сохраните файл без .php и спрячьте его где-нибудь, чтобы ваш сервер его не обслуживал.

Затем установите исполняемый бит, чтобы вы могли выполнять скрипт как обычную программу (u+x в следующей команде означает предоставление привилегий [u]ser e[x]ecute для helloworld, а chmod — это команда, которую варианты Unix используют для установки права доступа к файлам)

Опустите $ в следующей последовательности, поскольку она представляет собой командную строку.

$ chmod u+x helloworld

теперь вы можете выполнить свой скрипт командной строки, вызвав его в командной строке bash:

$ ls
helloworld
$ ./helloworld
Hello World
$

Отсюда вы можете получить полный путь к исполняемому скрипту:

$ readlink -f helloworld
/home/SPI/helloworld

И теперь вы можете установить cronjob, используя путь к вашему исполняемому скрипту.

person Lucas Green    schedule 06.09.2012
comment
Я явно неразумен. Документация, с которой вы меня связали, очень полезна. Очевидно, я могу использовать это для циклического просмотра файла ссылок и загрузки каждой из них: wget -i файл Что-то вроде этого будет работать? wget --timestamping -i имя_файла ? - person captainspi; 06.09.2012
comment
Так и должно быть, если нет, я уверен, что wget сочтет это ошибкой. - person Lucas Green; 06.09.2012
comment
Ваш учебник был очень полезен, если бы я мог, я бы дал вам бонусные баллы за ваш ответ;) У меня есть еще один вопрос, когда я запускаю скрипт через bash следующим образом: ./path_to_script/script_name, есть ли способ сохранить возвращаемое значение скрипта в переменной bash? - person captainspi; 22.09.2012