update
This commit is contained in:
112
datax/ADD/ccmd
Executable file
112
datax/ADD/ccmd
Executable file
@@ -0,0 +1,112 @@
|
||||
#!/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 Init 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 Start 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 Start 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 Not found any job!
|
||||
}
|
||||
|
||||
function Main {
|
||||
cd /opt/datax
|
||||
Usage
|
||||
InitPipe
|
||||
trap "GOT_SIGTERM=1; Print Got SIGTERM ...; exit" SIGTERM
|
||||
StartProc
|
||||
}
|
||||
|
||||
# Start here
|
||||
Main
|
||||
|
Reference in New Issue
Block a user