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
 | 
						|
 |