首先, 我们写这样一段代码, 要求在关闭控制台后继续在后端执行,
<?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
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 里写入当前时间戳的例子, 刚查找了一些资料,得到了两种方式,现在尝试一下.
第一种, 命令后面加上 & 符号, 可以让启动的进程转到后台运行,而不占用控制台
我们运行一下代码,得到了当前的进程号:
[root@instance_439b09 study]# php test.php &
[2] 17158
[root@instance_439b09 study]#
1
2
3
[root@instance_439b09study]# php test.php &
[2]17158
[root@instance_439b09study]#
打开 tail -f 1.txt
看到文件里一直有内容在写入
[root@instance_439b09 study]# tail -f 1.txt
1540863949
1540863949
1540863951
1540863951
1540863953
1
2
3
4
5
6
[root@instance_439b09study]# tail -f 1.txt
1540863949
1540863949
1540863951
1540863951
1540863953
代码这样运行在服务端,就可以一直执行下去了, 如果涉及重启服务器,需要重新启动或者设置开机启动相关代码,
如果需要查看进程,
ps -ef | grep “text.php”
找到进程杀掉就好了
[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
1
2
3
4
[root@instance_439b09study]# ps -ef | grep "test.php"
root1709116553009:37pts/000:00:00phptest.php
root1715816553009:44pts/000:00:00phptest.php
root1719216553009:48pts/000:00:00greptest.php
第二种, 在命令之前加上 nohup ,启动的进程将会忽略linux的挂起信号 (SIGHUP)
nohup php test.php &
[1] 17263
[root@instance_439b09 study]# nohup: ignoring input and appending output to `nohup.out'
1
2
3
nohupphptest.php&
[1]17263
[root@instance_439b09study]# nohup: ignoring input and appending output to `nohup.out'
nohup: 忽略输入并把输出追加到“nohup.out”
然后我们可以组合这两种方式,
nohup php test.php >logs.txt 2>error.txt &
其中 >logs.txt 重定向标准输出,2>error.txt 重定向标准错误输出。
这时我们还可以通过 fg 命令让进程恢复到普通占用控制台的模式
[root@instance_439b09 study]# fg
nohup php test.php
1
2
[root@instance_439b09study]# fg
nohupphptest.php