我有一个 php 控制台应用程序和一个 Ubuntu 服务器。我使用以下基本命令执行该应用程序:
php app.php
我想重复执行它,但 cronjobs 不适合我。相反,我希望它执行时,当 app.php 完成工作时,它会立即再次执行(就像一个无限循环),而不是每隔 X 分钟再次执行一次。所以我制作了这个 bash 脚本:
while true; do
php app.php
done
这解决了我的问题,但是使用while true
似乎很糟糕。如果需要,是否可以停止此 bash 脚本?或者你能告诉我一个更好的方法吗?
(app.php 文件,获取一长串网站 URL 及其内容。它就像一个网络蜘蛛。我通过 ssh 连接到服务器,用 nohup 执行 bash 脚本,然后关闭终端。)
答案1
以下是您可以执行的操作的示例:
#!/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。要继续,您必须按Enter。要完成,您必须按Ctrl+ C。
如果您使用以下命令在后台运行脚本:
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>
答案2
我认为您可以使用您的脚本,当您想要停止它时,您可以打开一个终端并:
1.获取脚本的 pid:ps -ef | grep "mycript"
2.终止kill -s 15 PID
或杀死kill -s 9 PID
它。