#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, или могут не сработать другие вещи, которые работают нормально, когда вы вводите их в командной строке