首先, 我们写这样一段代码, 要求在关闭控制台后继续在后端执行,
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php /** * Created by PhpStorm. * User: iyahe@qq.com (天明) * Date: 2018/10/29 * Time: 18:25 */ while (true) { sleep(2); file_put_contents('1.txt', time(). PHP_EOL, FILE_APPEND); } |
可以看出这是一个会一直往 1. tex 里写入当前时间戳的例子, 刚查找了一些资料,得到了两种方式,现在尝试一下.
第一种, 命令后面加上 & 符号, 可以让启动的进程转到后台运行,而不占用控制台
我们运行一下代码,得到了当前的进程号:
1 2 3 |
[root@instance_439b09 study]# php test.php & [2] 17158 [root@instance_439b09 study]# |
打开 tail -f 1.txt
看到文件里一直有内容在写入
1 2 3 4 5 6 |
[root@instance_439b09 study]# tail -f 1.txt 1540863949 1540863949 1540863951 1540863951 1540863953 |
代码这样运行在服务端,就可以一直执行下去了, 如果涉及重启服务器,需要重新启动或者设置开机启动相关代码,
如果需要查看进程,
ps -ef | grep “text.php”
找到进程杀掉就好了
1 2 3 4 |
[root@instance_439b09 study]# ps -ef | grep "test.php" root 17091 16553 0 09:37 pts/0 00:00:00 php test.php root 17158 16553 0 09:44 pts/0 00:00:00 php test.php root 17192 16553 0 09:48 pts/0 00:00:00 grep test.php |
第二种, 在命令之前加上 nohup ,启动的进程将会忽略linux的挂起信号 (SIGHUP)
1 2 3 |
nohup php test.php & [1] 17263 [root@instance_439b09 study]# nohup: ignoring input and appending output to `nohup.out' |
nohup: 忽略输入并把输出追加到“nohup.out”
然后我们可以组合这两种方式,
其中 >logs.txt 重定向标准输出,2>error.txt 重定向标准错误输出。
这时我们还可以通过 fg 命令让进程恢复到普通占用控制台的模式
1 2 |
[root@instance_439b09 study]# fg nohup php test.php |