前几天接到一个任务,要运行一个脚本,批量操作数据。
首先想到的是定时任务:crontab -e 编辑定时脚本。
后来尝试后台运行。现在整理一下:
nohup php test.php > out.log 2>&1 &
nohup和&的区别
&:指在后台运行。当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上& 实现后台运行。使用&命令时,关闭当前控制台窗口或退出当前帐户时,作业就会停止运行。
nohup:即no hang up[不挂起]。不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行。
参数解析
nohup php test.php > out.log 2>&1 &
在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到out.log 文件中。
'>>‘和’>'都属于输出重定向,<属于输入重定向。
'>'会覆盖目标的原有内容。当文件存在时会先删除原文件,再重新创建文件,然后把内容写入该文件;否则直接创建文件。
'>>'会在目标原有内容后追加内容。当文件存在时直接在文件末尾进行内容追加,不会删除原文件;否则直接创建文件。