Как выполнять php-скрипт каждый день

Возможный дубликат:
Задание Cron в Ubuntu для php< /а>

Я работаю на сервере Ubuntu и хочу каждый день запускать php-скрипт. Я провел некоторое исследование и обнаружил, что cron — лучший способ сделать это, однако именно здесь я застрял, много информации в Интернете о cron очень сложно понять и понять.

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

Я попытался настроить задачу через plesk, который предоставляется через службу веб-хостинга, но, похоже, она не выполнялась, когда я этого хотел, я использовал 1 для минут, 22 для часов, * для дня, * для недели и * для месяц и думал, что это будет выполняться каждый день в 22:01.

На моем сервере есть каталоги: cron.hourly cron.daily cron.weekly cron.monthly

Я думал, что могу сбросить туда свой файл, и он будет выполняться, например, каждый день, но я предполагаю, что мне нужно сделать скрипт cron для вызова php-скрипта, верно?

Если бы я поместил файл в папку cron.daily, как бы я это сделал?

Также, если есть какие-либо шаги, которые мне нужно предпринять на стороне php, пожалуйста, дайте мне знать?

Большое спасибо за ваше время.


person ragebunny    schedule 31.08.2012    source источник


Ответы (2)


Есть несколько способов настроить работу cron. Предполагая, что у вас есть доступ к оболочке, вы можете выполнить crontab -e из консоли и определить задание там, т.е. вот так:

1 22 * * * command

который будет запускать command (что бы это ни было) в 22:01 каждый день (хотя не знаю, почему вы устанавливаете минуты на 1 вместо 0). Чтобы запустить PHP-скрипт оттуда, вам нужно либо установить php-cli, а затем вызвать его таким образом:

1 22 * * * <path>/php -q script.php

Вы также можете вызвать скрипт bash здесь, чтобы настроить все вещи, такие как пути и т. д., а затем вызвать bash из формы вашего php-скрипта — иногда проще сделать это, вместо того, чтобы создавать слишком длинную командную строку для cron. И проще потом обновить. Кроме того, вы можете превратить свой php-скрипт в скрипт, запускаемый bash, установив для него бит выполнения (chmod a+x script.php) и добавив shebang оболочки:

#!/usr/bin/php -q
<?php
   ...

Если у вашего скрипта слишком много зависимостей и вы предпочитаете вызывать его через Интернет, вы можете использовать wget для имитации браузера. так что ваш command будет:

/usr/bin/wget --delete-after --quiet --spider <URL-TO-YOUR-SCRIPT>

Руководство по wget доступно по адресу man wget или wget -h или находится на этом веб-сайте. В качестве альтернативы вы можете использовать инструмент HEAD из пакета perl-www, но для этого требуется Perl, а wget является автономным инструментом. Если вы используете HTTPS с самоподписанными сертификатами, добавьте --no-check-certificate к аргументам вызова. И вы также можете настроить .htaccess и ограничить веб-доступ к вашему скрипту cron на localhost/127.0.0.1.

person Marcin Orlowski    schedule 31.08.2012
comment
Не могли бы вы немного объяснить эти атрибуты, я не уверен, что делает -r для --spider. Спасибо. - person ragebunny; 31.08.2012
comment
Скорее всего, -r в вашем случае не требуется: "‘-r’ / ‘--recursive’ Turn on recursive retrieving." - я редактирую ответ, но --spider полезен, так как вам действительно не нужно загружать вывод страницы, а просто заставить httpd запустить его: "--spider’ When invoked with this option, Wget will behave as a Web spider, which means that it will not download the pages, just check that they are there.". В качестве альтернативы можно использовать инструмент HEAD из пакета perl www. wget -h или man wget предоставят вам подробную информацию или посмотрите здесь gnu.org/software/wget /manual/wget.html. - person Marcin Orlowski; 31.08.2012
comment
Поэтому, если использовать команду crontab -e, команда 1 22 * ​​* * /usb/bin/wget --delete-after --quiet --spider mysite.com/dostuff.php, который будет запускать этот файл каждый день? и мне не пришлось бы менять какие-либо пути или что-то еще для php внутри этого файла? Еще раз спасибо за помощь. - person ragebunny; 03.09.2012
comment
Да, это (обратите внимание на префикс URL-адреса http://) 1 22 * * * command /usb/bin/wget --delete-after --quiet --spider http://mysite.com/dostuff.php будет указывать на mysite.com/dostuff.php сценарий через Интернет каждый день в 22:01. Конечно, на сервере должен быть установлен wget инструмент, но это не проблема (sudo apt-get install wget для обеспечения) - person Marcin Orlowski; 03.09.2012
comment
Это потрясающе, я думаю, сегодня вечером в 22:01 мы узнаем, сработало ли это :P Кстати, есть ли способ проверить это, не ожидая столько времени или не настраивая его на запуск каждую минуту? - person ragebunny; 03.09.2012
comment
Конечно. Просто проверьте, сколько сейчас времени, и установите задание cron, т.е. в следующую минуту :) сейчас 13:04, так что установите 5 13 и подождите (убедитесь, что часы сервера идут точно и тот же часовой пояс, просто вызовите date и посмотрите) - person Marcin Orlowski; 03.09.2012
comment
Просто чтобы еще раз проверить, мне не нужно перезапускать cron или что-то в этом роде? - person ragebunny; 03.09.2012
comment
Ответ на это - нет! Большое спасибо за вашу помощь, это была лучшая помощь, которую я получил на этом сайте! - person ragebunny; 03.09.2012
comment
Нет, cron не нужно перезапускать, так как редактирование заданий cron через crontab достаточно для того, чтобы демон заметил изменение. - person Marcin Orlowski; 03.09.2012
comment
Обратите внимание, что ответы альтернативно относятся к /usr и /usb. В моем Amazon Linux правильное расположение — /usr/bin/wget. - person Annatar; 07.05.2014
comment
/usb вещи были обычной опечаткой. - person Marcin Orlowski; 28.02.2015

каждую минуту:

* * * * * /path/script.php

каждые 24 часа (каждую полночь):

0 0 * * * /path/script.php

Посмотрите эту ссылку, чтобы узнать, как работает crontab: http://adminschoice.com/crontab-quick-reference , и этот удобный инструмент для создания cron jobx: http://www.htmlbasix.com/crontab.shtml

person JohannesAndersson    schedule 31.08.2012