远程服务器后台运行
连接远程服务器的时候,如果程序运行时间太长,很可能会出现Broken Pipe的情况。
解决的方法就是用nohup指令将程序放到服务器后台执行。退出远程连接也不会影响程序的运行。
nohup指令是no hand up的缩写,即不挂起。
指令使用方法如下:
nohup [指令] &
具体例子:
nohup bash -x test.sh &
&符号是在后台执行,执行的输出日志会自动存储到当前目录下的nohup.out文件中。
输出重定向:
nohup bash test.sh > test.log 2>&1 &
2>&1 解释:
将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 test.log 文件中。
- 0 – stdin (standard input,标准输入)
- 1 – stdout (standard output,标准输出)
- 2 – stderr (standard error,标准错误输出)
如果将重定向和2>&1 交换位置
nohup bash test.sh 2>&1 > test.log &
标准错误 2 重定向到控制台,标准输出 &1 被重定向输入到 test.log 文件中。
shell的并行
shell的并行可以简单的使用循环完成。
for file in `ls $file_path`
do
{
code
} &
done
wait
& 是创建一个进程,将for循环括号里的内容放到这个进程中执行。
wait会阻塞当前父进程,等待所有子进程运行结束才继续执行父进程。
上述的代码也可以缩写一些,直接把&放在要并行执行的语句后面。如下:
for file in `ls $file_path`
do
code
code &
done
wait