113 lines
2.8 KiB
Bash
Executable File
113 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
##################################################
|
|
# Mount dir #
|
|
# - /opt/datax/log #
|
|
# - /opt/datax/log_perf #
|
|
# - /opt/datax/job #
|
|
# ENV #
|
|
# - JAVA_OPTS #
|
|
# - TIMEOUT #
|
|
# - MAX_PROCS #
|
|
##################################################
|
|
|
|
set -euo pipefail
|
|
export LANG=en_US.UTF-8
|
|
trap Quit EXIT
|
|
|
|
GOT_SIGTERM=
|
|
TIMEOUT="${TIMEOUT:-10m}"
|
|
MAX_PROCS=${MAX_PROCS:-1}
|
|
|
|
function Print {
|
|
local file=/dev/null
|
|
[ '-f' = "$1" ] && file=$2 && shift && shift
|
|
date +"[%F %T] $*" | tee -a $file
|
|
}
|
|
|
|
function Quit {
|
|
while :; do
|
|
pkill -f java && Print killing java ... || break
|
|
sleep 1
|
|
done
|
|
exec 1022<&-
|
|
Print Container stopped.
|
|
test -n "$GOT_SIGTERM"
|
|
}
|
|
|
|
function Usage {
|
|
Print 'This container should run with
|
|
**env TIMEOUT, default 10m(ten minutes)**
|
|
**env MAX_PROCS, default 1**
|
|
**/opt/datax/{log,log_perf,job} mounted from host**
|
|
'
|
|
}
|
|
|
|
function InitPipe {
|
|
Print Initing named pipe ...
|
|
rm -rf pool.pipe
|
|
mkfifo pool.pipe
|
|
exec 1022<> pool.pipe
|
|
rm -rf pool.pipe
|
|
printf "%${MAX_PROCS}s" '' >&1022
|
|
}
|
|
|
|
function StartJob {
|
|
local job="$1"
|
|
local code=0
|
|
Print Starting job $job with timeout $TIMEOUT ...
|
|
timeout ${TIMEOUT} java \
|
|
-server \
|
|
-Xms1g \
|
|
-Xmx1g \
|
|
-Duser.timezone=GMT+08 \
|
|
-XX:+HeapDumpOnOutOfMemoryError \
|
|
-XX:HeapDumpPath=$PWD/log \
|
|
${JAVA_OPTS:-} \
|
|
-Dfile.encoding=UTF-8 \
|
|
-Dlogback.statusListenerClass=ch.qos.logback.core.status.NopStatusListener \
|
|
-Djava.security.egd=file:///dev/urandom \
|
|
-Ddatax.home=$PWD \
|
|
-Dlogback.configurationFile=$PWD/conf/logback.xml \
|
|
-classpath "$PWD/lib/*:." \
|
|
-Dlog.file.name=$job \
|
|
com.alibaba.datax.core.Engine \
|
|
-mode standalone \
|
|
-jobid -1 \
|
|
-job $PWD/job/$job.json \
|
|
>/dev/null \
|
|
2>log/$job.error \
|
|
|| code=$?
|
|
if [ 0 -eq $code ]; then
|
|
Print Job $job finished.
|
|
elif [ 124 -eq $code ]; then
|
|
Print Job $job timeout!
|
|
else
|
|
Print Job $job stopped unexpectly!
|
|
fi
|
|
echo >&1022
|
|
}
|
|
|
|
function StartProc {
|
|
Print Starting datax with max $MAX_PROCS parallel jobs ...
|
|
local job=
|
|
for job in $(ls job/ | grep '\.json$'); do
|
|
read -n 1 -u 1022
|
|
StartJob "${job%.json}" &
|
|
done
|
|
wait
|
|
[ -n "$job" ] && Print All jobs finished. || Print Not found any job!
|
|
}
|
|
|
|
function Main {
|
|
cd /opt/datax
|
|
Usage
|
|
InitPipe
|
|
trap "GOT_SIGTERM=1; Print Got SIGTERM ...; exit" SIGTERM
|
|
StartProc
|
|
}
|
|
|
|
# Start here
|
|
Main
|
|
|