Как запускать php-файл в shell-скрипте бесконечное количество раз

#php #linux #bash #shell #debian

#php #linux #bash #оболочка #debian

Вопрос:

Я новичок в системе Linux и пытаюсь создать PHP-скрипт, который можно запускать бесконечное количество раз. Обратите внимание, что я использую Debian 7 .

Итак, я использую screen для открытия окна, пока все хорошо, у меня worker.php файл уже успешно запущен, и мне нужно создать shell-скрипт, который запускает php-скрипт бесконечное количество раз.

Итак, я придумал это:

 #!/bin/sh
for (( ; ; ))
do
    /usr/bin/php worker.php
    sleep 1
done
  

Проблема в том, что при попытке запуска ./worker.sh в screen я получаю эту ошибку:

 bash: ./worker.sh: /bin/sh^M: bad interpreter: No such file or directory
  

Итак, я удалил for и заменил его простым echo , что приводит к той же ошибке, поэтому я написал этот вопрос, потому что я не знаю, что не так, оба sh или bash существуют на сервере, мне интересно, shebang не так ли, но.. У меня есть automysqlbackup скрипт, который начинается с того же shebang .

Вы хоть представляете, что не так? Я всего лишь новичок .. на самом деле мало что знаю. Если вам интересно, почему я запускаю файл каждую секунду, это потому, что этот файл служит обработчиком команд из очереди в игре. И запускать его с помощью cron каждую минуту слишком медленно. Триггеры MySQL не соответствуют моим потребностям, поэтому я вынужден это делать.

С уважением.

Комментарии:

1. Вероятно, у вас есть символ ^M возврата каретки в конце вашего shebang, поскольку в нем говорится, что он /bin/sh^M не существует. например, вы создали свой файл сценария на компьютере с Windows и выполняете его в Unix-иш-окне.

Ответ №1:

Судя по сообщению, у вас есть <cr><lf> в конце вашей строки shebang (#!). Поскольку в debian unix конец строки недопустим (он есть в Windows и некоторых других версиях unix), он берется как часть имени файла, и поэтому o / s не может найти программу для запуска.

Для его исправления потребуется что-то вроде этого:

 tr -d '15' < worker.sh > worker_nocr.fixed
  

Кроме того, поскольку вы используете bash в качестве своей оболочки, вы можете захотеть изменить shebang, чтобы также использовать bash, или могут не сработать другие вещи, которые работают нормально, когда вы вводите их в командной строке