У меня есть консольное приложение php и сервер Ubuntu. Я выполняю приложение с помощью этой базовой команды:
php app.php
Я хочу выполнить его повторно, но cronjobs мне не подходит. Вместо этого я хочу, чтобы он выполнялся так, чтобы, когда app.php заканчивал работать, он выполнялся снова немедленно (как цикл бесконечности), а не выполнялся снова каждые X минут. Поэтому я сделал этот скрипт:
while true; do
php app.php
done
это решает мою проблему, но использование while true
кажется злым. Можно ли остановить этот скрипт, если это необходимо? Или вы можете сказать мне лучший способ сделать это?
(файл app.php, извлекает длинный список URL-адресов веб-сайтов и их содержимого. Это как веб-паук. Я подключаюсь к серверу через ssh, выполняю скрипт bash с nohup, а затем закройте терминал.)
Я думаю, что вы можете использовать свой скрипт, и когда вы хотите остановить его, вы открываете терминал и:
1. Получите pid скрипта: ps -ef | grep "mycript"
2. Завершите [ 111] или убей kill -s 9 PID
его.
Вот пример того, что вы можете сделать:
#!/bin/bash
while true; do
if [ -t 0 ]; then stty -echo -icanon time 0 min 0; fi
keypress=''
while [ "x$keypress" = "x" ]; do
#do something... in your case:
php app.php
#end of 'do something'
read keypress
done
if [ -t 0 ]; then stty sane; fi
echo "You pressed '$keypress' for pause."
read -p 'Press [Enter] key to continue or [Ctrl+C] to finish...'
done
Чтобы сделать паузу, вы можете нажать любую клавишу без Enter kbd>. Чтобы продолжить, нажмите Enter kbd>. Чтобы закончить, вы должны нажать Ctrl kbd> + C kbd>.
Если вы запускаете скрипт в фоновом режиме, используя:
nohup <name_of_script> &
, вы можете остановить его, используя следующие команды:
ps -ef | grep <name_of_script> #to find the pid of the running script
kill -9 <pid_of_your_running_script>