|
|
#!/bin/bash |
|
|
set -e |
|
|
|
|
|
|
|
|
log() { |
|
|
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" |
|
|
} |
|
|
|
|
|
|
|
|
trap "log '收到终止信号,关闭进程...'; kill \$(jobs -p) 2>/dev/null; exit 0" SIGTERM |
|
|
|
|
|
|
|
|
services=$(jq -c '.[]' services.json) |
|
|
|
|
|
|
|
|
echo "$services" | while read -r service; do |
|
|
name=$(echo $service | jq -r '.name') |
|
|
command=$(echo $service | jq -r '.command') |
|
|
port=$(echo $service | jq -r '.port') |
|
|
working_dir=$(echo $service | jq -r '.working_dir // "/home/pn/app"') |
|
|
|
|
|
log "Starting $name on port $port in directory $working_dir" |
|
|
|
|
|
|
|
|
eval $(echo $service | jq -r '.env // {} | to_entries | .[] | "export " + .key + "=\"" + .value + "\""') |
|
|
|
|
|
|
|
|
if [ ! -d "$working_dir" ]; then |
|
|
log "ERROR: Directory $working_dir does not exist" |
|
|
exit 1 |
|
|
fi |
|
|
(cd $working_dir && PORT=$port eval "$command") & |
|
|
|
|
|
|
|
|
pids+=($!) |
|
|
log "$name started with PID ${pids[-1]}" |
|
|
done |
|
|
|
|
|
|
|
|
sleep 5 |
|
|
|
|
|
|
|
|
exec traefik --configFile=$TRAEFIK_CONFIG_FILE |