完善auth_build.sh和auto_cleaner.sh,提升自动打包过程的稳定性
This commit is contained in:
parent
cdb3c27617
commit
bfe0af9ea2
3
.gitignore
vendored
3
.gitignore
vendored
@ -7,4 +7,5 @@ dist
|
||||
.user.ini
|
||||
.env
|
||||
*.log
|
||||
*.log.*
|
||||
*.log.*
|
||||
*.lock
|
14
README.md
14
README.md
@ -60,3 +60,17 @@ php start.php start -d
|
||||
```
|
||||
|
||||
> 需要开放程序所在服务器的8787端口,或者做一个反向代理到8787端口的http站点。
|
||||
|
||||
### 避免因自动打包进程意外终止而导致永远无法自动打包
|
||||
|
||||
```sh
|
||||
crontab -e
|
||||
```
|
||||
|
||||
添加下面一行
|
||||
|
||||
```crontab
|
||||
*/10 * * * * /path/to/auto_cleaner.sh /path/to/ >/dev/null 2>&1
|
||||
```
|
||||
|
||||
其中`/path/to/`要替换成实际路径。
|
||||
|
@ -1,7 +1,75 @@
|
||||
#!/bin/bash
|
||||
|
||||
git pull origin master
|
||||
log_file="auto_build.log"
|
||||
lock_file="auto_build.lock"
|
||||
timeout=600 # 超时时间,单位为秒
|
||||
|
||||
yarn install
|
||||
# 记录日志函数
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$$] $1" >> "$log_file"
|
||||
}
|
||||
|
||||
yarn build
|
||||
# 记录开始执行日志
|
||||
log "start"
|
||||
|
||||
# 检查是否有其他进程正在执行
|
||||
while [ -f "$lock_file" ]; do
|
||||
another_pid=$(cat "$lock_file")
|
||||
log "另一个进程[$another_pid]正在执行,等待中……"
|
||||
sleep 5
|
||||
timeout=$((timeout - 1))
|
||||
if [ "$timeout" -le 0 ]; then
|
||||
log "等待超时,退出"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# 创建锁文件
|
||||
echo $$ > "$lock_file"
|
||||
|
||||
# 执行git pull
|
||||
execute() {
|
||||
log "$1"
|
||||
result=$(eval "$1" 2>&1)
|
||||
log "$result"
|
||||
}
|
||||
|
||||
# 执行git pull
|
||||
execute "git pull"
|
||||
|
||||
# 检查git pull执行结果
|
||||
if [ $? -eq 0 ]; then
|
||||
# git pull执行成功,执行yarn install
|
||||
execute "yarn install"
|
||||
|
||||
# 检查yarn install执行结果
|
||||
if [ $? -eq 0 ]; then
|
||||
# yarn install执行成功,执行yarn build
|
||||
execute "yarn build"
|
||||
|
||||
# 检查yarn build执行结果
|
||||
if [ $? -ne 0 ]; then
|
||||
# yarn build执行失败,异常退出
|
||||
log "yarn build执行失败"
|
||||
rm "$lock_file"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# yarn install执行失败,异常退出
|
||||
log "yarn install执行失败"
|
||||
rm "$lock_file"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# git pull执行失败,异常退出
|
||||
log "git pull执行失败"
|
||||
rm "$lock_file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 记录完成执行日志
|
||||
log "done"
|
||||
|
||||
# 删除锁文件并正常退出
|
||||
rm "$lock_file"
|
||||
exit 0
|
||||
|
37
auto_cleaner.sh
Normal file
37
auto_cleaner.sh
Normal file
@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
|
||||
log_file="auto_cleaner.log"
|
||||
lock_dir="${1:-./}"
|
||||
lock_file="${lock_dir}auto_build.lock"
|
||||
timeout=600 # 超时时间,单位为秒
|
||||
|
||||
# 记录日志函数
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$log_file"
|
||||
}
|
||||
|
||||
# 拼接锁文件路径
|
||||
lock_file="${lock_dir}auto_build.lock"
|
||||
|
||||
# 判断锁文件是否存在
|
||||
if [ -f "$lock_file" ]; then
|
||||
# 获取锁文件中的进程ID
|
||||
pid=$(cat "$lock_file")
|
||||
|
||||
# 判断系统中是否有该进程
|
||||
if ps -p "$pid" >/dev/null; then
|
||||
# 判断进程名称是否包含auto_build.sh
|
||||
process_name=$(ps -o comm= -p "$pid")
|
||||
if [[ "$process_name" == *"auto_build.sh"* ]]; then
|
||||
log "进程[$pid]异常,释放$lock_file"
|
||||
rm "$lock_file"
|
||||
else
|
||||
log "进程[$pid]验证正常"
|
||||
fi
|
||||
else
|
||||
log "进程[$pid]异常,释放$lock_file"
|
||||
rm "$lock_file"
|
||||
fi
|
||||
else
|
||||
log "未发现$lock_file"
|
||||
fi
|
Loading…
Reference in New Issue
Block a user