一、后台执行
1. 使用&符号在后台执行命令
你可以在Linux命令或者脚本后面增加&
符号,从而使命令或脚本在后台执行,例如:.
$ ./my-shell-script.sh &
2. 使用nohup在后台执行命令
使用&
符号在后台执行命令或脚本后,如果你退出登录,这个命令就会被自动终止掉。要避免这种情况,你可以使用nohup
命令,如下所示:
$ nohup ./my-shell-script.sh &
3. 使用screen执行命令
通过nohup
和&
符号在后台执行命令后,即使你退出登录,这个命令也会一直执行。但是,你无法重新连接到这个会话,要想重新连接到这个会话,你可以使用screen
命令。.
Linux的screen命令提供了分离和重新连接一个会话的功能。当你重新连接这个会话的时候,你的终端和你分离的时候一模一样。
4. 使用 at 将一个命令作为批处理执行
使用at
命令,你可以让一个命令在指定的日期和时间运行,例如要在明天上午10点
在后台执行备份脚本,执行下面的命令:
$ at -f backup.sh 10 am tomorrow
5. 使用watch连续地执行一个命令
要想按一个固定的间隔不停地执行一个命令,可以使用watch
命令,如下所示:
$ watch df -h
(df: Disk Free, 显示系统上可使用的磁盘空间)
二、重定向
在shell脚本中,默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入)、标准输出(输出到屏幕)、标准错误(也是输出到屏幕),它们分别对应的文件描述符是0,1,2 。
> 默认为标准输出重定向,与 1> 相同
2>&1 意思是把 标准错误输出 重定向到 标准输出.
&>file 意思是把标准输出 和 标准错误输出 都重定向到文件file中
三、示例
串行执行多个 luigi 任务
test.sh
#!/usr/bin/env bash
cd /home/your_name
export PYTHONPATH=/home/your_name_foder
luigi --module xxx --data xxx --start-date 2020-12-01 --date 2021-01-05 --workers 10 > ./my_log.log 2>&1
luigi --module xxx --data xxx --start-date 2020-12-01 --date 2021-01-05 --workers 10 > ./my_log.log 2>&1
...
命令行执行:
nohup ./test.sh &
nohup ... &
表示后台执行
注:如果 shell 脚本的里面每个job都采用后台执行的话,那么总的并发数 = worker(10) * num_jobs,这样并发量太高(job 之间就是并行而非串行了)