CentOS 6虚拟机中Gulp Watch多目录日志输出配置问询
没问题,这个需求用bash脚本就能轻松实现,核心是用tee命令把gulp的输出同时写到两个日志文件,再配合循环和后台运行来处理多个目录。我给你写个完整的脚本,再拆解下关键部分:
完整实现脚本
#!/bin/bash # 定义需要监控的目录数组 directories=( 'local.site1.com' 'local.site2.co.uk' ) # 可选:清空汇总日志(如果希望每次运行从头记录,注释掉则追加) > all-gulp.log # 遍历每个目标目录 for dir in "${directories[@]}"; do # 先检查目录是否存在,避免报错 if [ -d "$dir" ]; then echo "启动gulp watch监控目录: $dir" # 用子shell进入目录执行命令,避免影响脚本全局工作目录 # 2>&1 把错误输出也合并到标准输出,确保错误日志也能写入文件 # tee -a 同时追加内容到单个目录日志和汇总日志 # & 让每个gulp进程在后台运行,不阻塞循环 (cd "$dir" && gulp watch 2>&1 | tee -a "../${dir}-gulp.log" "../all-gulp.log") & else echo "警告:目录 $dir 不存在,跳过该目录" fi done # 可选:等待所有后台gulp进程结束(如果需要脚本一直保持运行状态) wait echo "所有gulp watch监控进程已在后台启动"
关键部分解释
2>&1:把gulp的错误输出(比如编译失败、配置错误)也重定向到标准输出,这样错误信息会和正常日志一起写入文件,不会丢失。tee -a:tee命令的作用是把输入同时输出到多个目标,-a参数表示以追加模式写入,避免每次启动都覆盖之前的日志内容。这里我们同时指定了单个目录的日志文件和汇总日志文件。- 子shell
(cd "$dir" && ...):用括号包裹命令会启动一个子shell,进入目标目录执行gulp后,子shell结束不会影响脚本本身的工作目录,避免后续循环出错。 - 后台运行
&:每个gulp watch进程会在后台执行,这样循环可以继续处理下一个目录,不会被第一个gulp进程阻塞。 wait命令:如果希望脚本一直保持运行状态(比如放在screen或者nohup里),加上wait可以让脚本等待所有后台gulp进程结束后再退出。
注意事项
- 确保每个目标目录下都存在有效的
gulpfile.js,并且已经安装了所需的gulp依赖(可以提前在每个目录里执行npm install)。 - 如果需要停止所有监控进程,可以用命令:
pkill -f gulp(谨慎使用,会杀掉所有名为gulp的进程)。 - 日志文件会生成在脚本所在的目录下,如果需要指定其他路径,可以修改
../${dir}-gulp.log和../all-gulp.log中的路径。
内容的提问来源于stack exchange,提问作者Novocaine
相关产品推荐
相关产品推荐

