脚本来自于阿里canal

    1. #!/bin/bash
    2. current_path=`pwd`
    3. case "`uname`" in
    4. Linux)
    5. bin_abs_path=$(readlink -f $(dirname $0))
    6. ;;
    7. *)
    8. bin_abs_path=`cd $(dirname $0); pwd`
    9. ;;
    10. esac
    11. base=${bin_abs_path}/..
    12. canal_conf=$base/conf/canal.properties
    13. canal_local_conf=$base/conf/canal_local.properties
    14. logback_configurationFile=$base/conf/logback.xml
    15. export LANG=en_US.UTF-8
    16. export BASE=$base
    17. if [ -f $base/bin/canal.pid ] ; then
    18. echo "found canal.pid , Please run stop.sh first ,then startup.sh" 2>&2
    19. exit 1
    20. fi
    21. if [ ! -d $base/logs/canal ] ; then
    22. mkdir -p $base/logs/canal
    23. fi
    24. ## set java path
    25. if [ -z "$JAVA" ] ; then
    26. JAVA=$(which java)
    27. fi
    28. ALIBABA_JAVA="/usr/alibaba/java/bin/java"
    29. TAOBAO_JAVA="/opt/taobao/java/bin/java"
    30. if [ -z "$JAVA" ]; then
    31. if [ -f $ALIBABA_JAVA ] ; then
    32. JAVA=$ALIBABA_JAVA
    33. elif [ -f $TAOBAO_JAVA ] ; then
    34. JAVA=$TAOBAO_JAVA
    35. else
    36. echo "Cannot find a Java JDK. Please set either set JAVA or put java (>=1.5) in your PATH." 2>&2
    37. exit 1
    38. fi
    39. fi
    40. case "$#"
    41. in
    42. 0 )
    43. ;;
    44. 1 )
    45. var=$*
    46. if [ "$var" = "local" ]; then
    47. canal_conf=$canal_local_conf
    48. else
    49. if [ -f $var ] ; then
    50. canal_conf=$var
    51. else
    52. echo "THE PARAMETER IS NOT CORRECT.PLEASE CHECK AGAIN."
    53. exit
    54. fi
    55. fi;;
    56. 2 )
    57. var=$1
    58. if [ "$var" = "local" ]; then
    59. canal_conf=$canal_local_conf
    60. else
    61. if [ -f $var ] ; then
    62. canal_conf=$var
    63. else
    64. if [ "$1" = "debug" ]; then
    65. DEBUG_PORT=$2
    66. DEBUG_SUSPEND="n"
    67. JAVA_DEBUG_OPT="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=$DEBUG_SUSPEND"
    68. fi
    69. fi
    70. fi;;
    71. * )
    72. echo "THE PARAMETERS MUST BE TWO OR LESS.PLEASE CHECK AGAIN."
    73. exit;;
    74. esac
    75. str=`file -L $JAVA | grep 64-bit`
    76. if [ -n "$str" ]; then
    77. JAVA_OPTS="-server -Xms2048m -Xmx3072m -Xmn1024m -XX:SurvivorRatio=2 -XX:PermSize=96m -XX:MaxPermSize=256m -Xss256k -XX:-UseAdaptiveSizePolicy -XX:MaxTenuringThreshold=15 -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError"
    78. else
    79. JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=128m "
    80. fi
    81. JAVA_OPTS=" $JAVA_OPTS -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8"
    82. CANAL_OPTS="-DappName=otter-canal -Dlogback.configurationFile=$logback_configurationFile -Dcanal.conf=$canal_conf"
    83. if [ -e $canal_conf -a -e $logback_configurationFile ]
    84. then
    85. for i in $base/lib/*;
    86. do CLASSPATH=$i:"$CLASSPATH";
    87. done
    88. CLASSPATH="$base/conf:$CLASSPATH";
    89. echo "cd to $bin_abs_path for workaround relative path"
    90. cd $bin_abs_path
    91. echo LOG CONFIGURATION : $logback_configurationFile
    92. echo canal conf : $canal_conf
    93. echo CLASSPATH :$CLASSPATH
    94. $JAVA $JAVA_OPTS $JAVA_DEBUG_OPT $CANAL_OPTS -classpath .:$CLASSPATH com.alibaba.otter.canal.deployer.CanalLauncher 1>>$base/logs/canal/canal_stdout.log 2>&1 &
    95. echo $! > $base/bin/canal.pid
    96. echo "cd to $current_path for continue"
    97. cd $current_path
    98. else
    99. echo "canal conf("$canal_conf") OR log configration file($logback_configurationFile) is not exist,please create then first!"
    100. fi