Linux环境下,shell脚本实现多个命令同时运行
1、新建bash_test.sh
新建./out/文件夹,修改写入权限,详见问题解决2
2、编辑
#!/bin/bash
nohup python3 -u run0001.py >>./out/0001.out &
nohup python3 -u run0002.py >>./out/0002.out &
脚本命令说明:
nohup加在一个命令的最前面,表示不挂断的运行命令
-u 表示实时输出到.out
&加在一个命令的最后面,表示这个命令放在后台执行
‘>’,表示 输出重定向
‘>>’ 输出追加重定向(后续可以清空.out文件,清空方法见:out文件清理)
1>/dev/null 表示正常不输出
2>.out 表示错误输出到.out文件
注意:windows环境下编辑sh文件,一定要查找\r\n,改成\n
详见参考文献
2.1 命令运行后删除文件
sleep 10 && echo “delete” && rm filename
3、运行
修改权限
chmod +x ./bash_quant.sh # 非root用户需要修改权限,x直接用777
sudo chmod +x ./bash_quant.sh # 无权限提示chmod: changing permissions of './bash_quant.sh': Operation not permitted
运行脚本
./bash_test.sh # 运行脚本,或
source ./bash_test.sh
运行时报错bash: $’\r’: command not found,详见问题解决1
4、查看
ps -ef
ps aux | grep '进程名关键字' # 根据关键字查进程
管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
“ps aux” 查看所有进程的命令。这时检索出的进程将作为下一条命令grep "common"的输入。
"grep “common” 选出所有含有关键字"common"的进程。
可以看到2个进程同时开始运行啦
在这里插入图片描述
5、停止
批量结束进程
pkill -f name
批量结束进程名中带有name的进程
附录:命令连接符号
可以使用 && 或 | | 或;(根据需要选择连接符号)等来连接多条命令(连接符之间灭有空格,论坛可能有对| |字符串设置了特殊效果)
&& 表示"与",一条命令执行出错,则后面命令不执行
|| 表示"或",一条命令执行成功,则后面命令不执行
; 表示无论执行成功与否,一路执行下去(;可以直接用回车替代)
问题解决:
1、报错:bash: KaTeX parse error: Can't use function '\r' in math mode at position 2: '\̲r̲': command not …‘\r‘: command not found 的解决方案](https://blog.csdn.net/chenbaixing/article/details/118083528)
2、-bash: /out/.out: No such file or directory
-bash: /out/.out: Permission denied
输出文件夹未创建,无权限写入out文件
WinSCP右键点击文件夹选属性
权限:其他,勾选W
参考文献:
linux shell 报错 -bash:$‘\r‘: command not found 的解决方案
out文件清理