Запустите PHP-скрипт в фоновом режиме на Debian (Apache) -- objective-c поле с участием apache поле с участием apache2 поле с участием push-notification поле с участием debian пол Связанный проблема

Run a php script in background on debian (Apache)


2
vote

проблема

русский

Я пытаюсь сделать Push-уведомление работать на моем VPS Debian (Apace2, MySQL).

Я использую сценарий PHP из этого учебника (http://www.raywenderlich.com/3525/apple-push-notification-services-push-part-part-2).

В основном сценарий помещается в инфинтную петлю, которые проверяют таблицу MySQL для новых записей каждые пару секунд. Учебник говорит, что он должен работать как фоновый процесс.

 <код> // This script should be run as a background process on the server. It checks // every few seconds for new messages in the database table push_queue and  // sends them to the Apple Push Notification Service. // // Usage: php push.php development &   

Так что у меня есть четыре вопроса.

  1. Как начать скрипт с терминала? Что я должен напечатать? Расположение скрипта на сервере:

    /var/www/development_folder/scripts/push2/push.php

  2. Как я могу убить его, если мне нужно (без перезагрузки Alpace)?

  3. Поскольку is push-уведомление важно, мне нужен способ проверить, работает ли сценарий. Код (из учебника) вызывает функцию - это что-то идет не так:

     <код> function fatalError($message) {  writeToLog('Exiting with fatal error: ' . $message);  exit; }   

Может быть, я могу поставить что-то там, чтобы перезапустить скрипт? Но было бы также приятно иметь работу CRON или что-то, что проверяет каждые 5 минут или около того, если сценарий работает, и начните его, если оно делает не.

4 - Могу ли я сделать сценарий автоматически начать после перезапуска Mysql? Если сервер сбой или что-то еще происходит, что нужно перезапустить APACE?

Большое спасибо заранее

Английский оригинал

I'm trying to make a push notification work on my debian vps (apace2, mysql).

I use a php script from this tutorial (http://www.raywenderlich.com/3525/apple-push-notification-services-tutorial-part-2).

Basically, the script is put in an infintive loop, that check a mysql table for new records every couple of seconds. The tutorial says it should be run as a background process.

// This script should be run as a background process on the server. It checks // every few seconds for new messages in the database table push_queue and  // sends them to the Apple Push Notification Service. // // Usage: php push.php development & 

So I have four questions.

  1. How do I start the script from the terminal? What should I type? The script location on the server is:

    /var/www/development_folder/scripts/push2/push.php

  2. How can I kill it if I need to (without having to restart apace)?

  3. Since the push notification is essential, I need a way to check if the script is running. The code (from the tutorial) calls a function is something goes wrong:

    function fatalError($message) {  writeToLog('Exiting with fatal error: ' . $message);  exit; } 

Maybe I can put something in there to restart the script? But It would also be nice to have a cron job or something that check every 5 minute or so if the script is running, and start it if it doens't.

4 - Can I make the script automatically start after a apace or mysql restart? If the server crash or something else happens that need a apace restart?

Thanks a lot in advance

</div
              
 
 

Список ответов

8
 
vote
vote
Лучший ответ
 
  1. Вы можете запустить скрипт со следующей командой:

     <код> nohup php /var/www/development_folder/scripts/push2/push.php > /dev/null &   

    NOHUP означает, что команда не должна выходить (она игнорирует сигнал зависания), когда вы например. Закройте окно вашего терминала. Если вы не заботитесь об этом, вы можете просто начать процесс с помощью «PHP /VAR/www/development_Folder/scripts/push2/push.php & amp;» вместо. PS! NOHUP входит в систему выхода скрипта в файл под названием NOHUP.OUT по умолчанию, если вы не хотите этого, просто добавьте и GT; / dev / null, насколько я здесь сделал. & Amp; В конце означает, что Proccess будет работать на заднем плане. Я бы только порекомендовал запустить этот скрипт Push, пока вы проверяете свой код. Сценарий должен быть запускается как демон в системе Startup (см. 4.), если важно, чтобы он все время пробил.

  2. Просто тип

     <код> ps ax | grep push.php   

    и вы получите PlexiD (PID). Это будет выглядеть что-то подобное:

     <код> 4530 pts/3    S      0:00 php /var/www/development_folder/scripts/push2/push.php   

    PID - это первый номер, который вы увидите. Затем вы можете запустить следующую команду, чтобы убить скрипт:

     <код> kill -9 4530   

    Если вы запускаете PS AX | GREP Push.php Снова процесс должен сейчас пойти.

  3. Я бы порекомендовал, чтобы вы сделали Cronjob, которая проверяет, работает ли PHP-скрипт, а если нет, начнет его. Вы можете сделать это с помощью PS AX и GREP, чеками внутри вашего сценария оболочки. Что-то вроде этого должно сделать это:

     <код> if ! ps ax | grep -v grep | grep 'push.php' > /dev/null then   nohup php /var/www/development_folder/scripts/push2/push.php > /dev/null & else   echo "push-script is already running" fi   
  4. Если вы хотите, чтобы скрипт запускал после загрузки системы, вы можете сделать файл в /etc/init.d (например, /etc.init.d/mypushscript с чем-то вроде этого внутри:

     <код> php /var/www/development_folder/scripts/push2/push.php   

    (вы, вероятно, должны быть еще более в этом файле)

    Вам также необходимо запустить следующие команды:

     <код> zoo0  

    Чтобы скрипт начать при загрузке. Я не проверил это, поэтому, пожалуйста, сделайте больше исследований, прежде чем сделать свой собственный скрипт init!

 
  1. You could run the script with the following command:

    nohup php /var/www/development_folder/scripts/push2/push.php > /dev/null & 

    The nohup means that that the command should not quit (it ignores hangup signal) when you e.g. close your terminal window. If you don't care about this you could just start the process with "php /var/www/development_folder/scripts/push2/push.php &" instead. PS! nohup logs the script output to a file called nohup.out as default, if you do not want this, just add > /dev/null as I've done here. The & at the end means that the proccess will run in the background. I would only recommend starting the push script like this while you test your code. The script should be run as a daemon at system-startup instead (see 4.) if it's important that it runs all the time.

  2. Just type

    ps ax | grep push.php 

    and you will get the processid (pid). It will look something like this:

    4530 pts/3    S      0:00 php /var/www/development_folder/scripts/push2/push.php 

    The pid is the first number you'll see. You can then run the following command to kill the script:

    kill -9 4530 

    If you run ps ax | grep push.php again the process should now be gone.

  3. I would recommend that you make a cronjob that checks if the php-script is running, and if not, starts it. You could do this with ps ax and grep checks inside your shell script. Something like this should do it:

    if ! ps ax | grep -v grep | grep 'push.php' > /dev/null then   nohup php /var/www/development_folder/scripts/push2/push.php > /dev/null & else   echo "push-script is already running" fi 
  4. If you want the script to start up after booting up the system you could make a file in /etc/init.d (e.g. /etc.init.d/mypushscript with something like this inside:

    php /var/www/development_folder/scripts/push2/push.php 

    (You should probably have alot more in this file)

    You would also need to run the following commands:

    chmod +x /etc/init.d/mypushscript update-rc.d mypushscript defaults 

    to make the script start at boot-time. I have not tested this so please do more research before making your own init script!

</div
 
 
   
   

Связанный проблема

29  Сравнение двух массивов  ( Comparing two arrays ) 
У меня есть два NSArrays, что я хочу сделать, это сравнить два массива, которые содержат строки, найти сходство и снова создать первый массив, но у них нет ни...

5  Использование синхронизованного массива Singleton с NSTHAED  ( Using singleton synchronized array with nsthread ) 
У меня есть приложение книг с UISearchBar, где пользователь набирает любую имя книги и получает результаты поиска (из вызова EXT API) ниже, как он типы. Я и...

1  Как сохранить веб-страницу локально на iPhone?  ( How to save web page locally in iphone ) 
Я хочу увидеть ранее просмотренную веб-страницу в iPhone, когда я буду офлайн (не подключен к Интернету). В настоящее время я просто открываю веб-страницу и...

2  Делегат для объекта проходит к делегату  ( Delegate for object passes itself to delegate ) 
У меня есть подкласс UiimageView и хотел бы пройти как параметр к делегату. Я получаю ошибку «ожидаемую») «Перед MyImageView». Мне нужно пройти объект к делег...

0  OBJ -C метод объявления классов / объектов  ( Obj c method declaration classes objects ) 
Мы начинающие запутались, когда декларация метода имеет два или более аргументов, и я думаю, что он всегда объясняется, используя с использованием с использов...

0  Могу ли я использовать стремление для обновления подкласса UIVIEW?  ( Can i use drawrect to refresh a uiview subclass ) 
Я создал подкласс UIView называемого состояния, который предназначен для отображения прямоугольника определенного размера (в пределах зрения) в зависимости от...

2  Удаление разделов UiableView сочетается с пользовательскими заголовками раздела Uiviews = ошибка в коде Apple?  ( Deleting uitableview sections combined with custom section headers uiviews bug ) 
Я пытаюсь удалить раздел из UiableView с использованием анимации и пользовательской таблицы заголовка раздела UIViews. Я использую ... <код> //Deletion fr...

0  Как выполнить Segue, который находится на UitabbarController с суббота?  ( How to perform a segue that is on a uitabbarcontroller from a sub view ) 
У меня есть UITABBACONTROLLER, который имеет Segue, который ведет к моему входит в систему. Когда пользователь смотрит на один из подзлогов, пользователь може...

0  iPhone-SDK: Как избежать нескольких видов выбора ряда?  ( Iphone sdkhow to avoid multiple row selection view ) 
У меня есть таблица и содержимое строки (жесткое кодированное содержимое). Когда я выбираю один ряд и посмотрите содержимое, а затем вернитесь к тому же табли...

1  Есть ли сообщество iPhone с открытым исходным кодом? [закрыто]  ( Is there any iphone open source community ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

1  Реализация двойного крана в OpenFlow  ( Implementing double tap in openflow ) 
Какой лучший способ реализовать двойной кран, который отобразит новый контроллер представления при использовании OpenFlow ( https: // github.com/thefaj/openfl...

49  Документация-генератор для объекта-C? [закрыто]  ( Documentation generator for objective c ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт. Этот вопрос не соответствует Рекомендациям переполнения ...

1872  В чем разница между атомными и неатомическими атрибутами?  ( Whats the difference between the atomic and nonatomic attributes ) 
Что делать <код> atomic и <код> nonatomic означают в объявлениях свойства? <код> @property(nonatomic, retain) UITextField *userName; @property(atomic, ret...

1  Как динамически подкласс класс и мгновенный подкласс в объективном C?  ( How to dynamically subclass a class and instantate the subclass in objective c ) 
Я хочу динамично подкласс класса (сказать NSString) и создать этот подкласс для целей тестирования. Как я могу сделать это в объекте C? ...

4  Создайте каталог на iPhone  ( Create a directory on an iphone ) 
Я хочу знать, как создать каталог на указанном пути. Я использовал "систему (" путь каталога ");" Это работает нормально в симуляторе, но не на устройстве ...

Связанный проблема

29  Сравнение двух массивов 
5  Использование синхронизованного массива Singleton с NSTHAED 
1  Как сохранить веб-страницу локально на iPhone? 
2  Делегат для объекта проходит к делегату 
0  OBJ -C метод объявления классов / объектов 
0  Могу ли я использовать стремление для обновления подкласса UIVIEW? 
2  Удаление разделов UiableView сочетается с пользовательскими заголовками раздела Uiviews = ошибка в коде Apple? 
0  Как выполнить Segue, который находится на UitabbarController с суббота? 
0  iPhone-SDK: Как избежать нескольких видов выбора ряда? 
1  Есть ли сообщество iPhone с открытым исходным кодом? [закрыто] 
1  Реализация двойного крана в OpenFlow 
49  Документация-генератор для объекта-C? [закрыто] 
1872  В чем разница между атомными и неатомическими атрибутами? 
1  Как динамически подкласс класс и мгновенный подкласс в объективном C? 
4  Создайте каталог на iPhone