У меня есть многочастный вопрос для файла сценария php. Я создаю этот файл, который обновляет базу данных каждую секунду. Другого метода моделирования нет, его нужно делать каждую секунду.
Теперь я запускаю CentOS, и я новичок в этом. Первый вопрос о нобе:
Как запустить php-файл через SSH. Я читал, что это просто # php path-to / myfile.php. Но я попытался что-то повторить, и я не вижу его в тексте.
Теперь я не думаю, что запуск файла будет проблемой. Одна проблема, я думаю, будет, я не знаю, возможно ли это, но здесь.
Возможно ли, чтобы я был на сто процентов уверен, что файл запускается только один раз. Что произойдет, если я случайно запустил файл снова.
Мне было интересно, если я буду выполнять запись в журнал каждую секунду, я могу знать, все ли работает нормально. Если произошла ошибка или что-то не так, файл журнала остановится.
Является ли запись в файл журнала с помощью fopen, а также писать и закрывать. Разве это не займет много времени, нет ли в CentOS более простого метода.
Еще одна большая точка, которая у меня есть, – это то, что происходит, когда я запускаю файл. Происходит ли файл в памяти или он использует файл в системе. Отвечает ли он на изменения, внесенные в файл, например, чтобы остановить выполнение скрипта.
Могу ли я реализовать какой-то механизм остановки в самом файле. Или есть команда, которую я могу использовать для остановки файла.
Еще один вариант, о котором я знаю, – это внедрять cronjob, который запускается каждую минуту. И этот cronjob выполняет php-файл. Файл php будет зацикливаться в течение одной минуты, обновлять все необходимое и завершать. Я реализовал этот метод, но просто использовал браузер. Я просто просмотрел файл mu и открыл его. Я видел, что браузер был занят на минуту, но он ничего не обновлял в базе данных. Кто-нибудь может понять, в чем причина этого.
Другой вопрос, который у меня есть, – это реализовать метод cronjob, какую команду я заполняю в панели PLESK. Это то же самое, что и приведенная выше команда. просто php и имя файла. Или есть специальная команда, например -f -q -something.
Извините за все вопросы noob.
Если кто-то может мне помочь, я действительно ценю это.
Чао!
Самый простой способ обеспечить только одну копию вашего скрипта – использовать flock()
для получения блокировки файлов. Например:
<?php $fp = fopen("/tmp/lock.txt", "r+"); if (flock($fp, LOCK_EX)) { // do an exclusive lock ftruncate($fp, 0); // truncate file fwrite($fp, "Write something here\n"); flock($fp, LOCK_UN); // release the lock } else { echo "Couldn't get the lock!"; } fclose($fp); ?>
Таким образом, в основном у вас должен быть фиктивный файл, где ваш скрипт при запуске пытается получить блокировку. Если он преуспеет, он запускается. Если нет, оно завершается. Таким образом, только одна копия вашего скрипта может работать одновременно.
Примечание: flock()
– это метод консультативного блокирования, то есть он работает только в том случае, если вы его используете. Таким образом, это заставит ваш собственный сценарий запускаться несколько раз, но ничего не сделает с другими сценариями, что прекрасно звучит в вашей ситуации.
Вы не всегда можете полагаться на блокировку внутри самого скрипта, как указано в комментарии к предыдущему ответу. Это может быть решением.
#Mins Hours Days Months Day of week * * * * * lockfile -r 0 /tmp/the.lock; php parse_tweets.php; rm -f /tmp/the.lock * * * * * lockfile -r 0 /tmp/the.lock; php php get_tweets.php; rm -f /tmp/the.lock
Таким образом, даже если скрипты будут сбой, файл блокировки будет выпущен. Взято отсюда: https://unix.stackexchange.com/a/158459