自己动手写shell脚本

1. 什么是 java.awt.headless?
Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。

2. 何时使用和headless mode?
Headless模式虽然不是我们愿意见到的,但事实上我们却常常需要在该模式下工作,尤其是服务器端程序开发者。因为服务器(如提供Web服务的主机)往往可能缺少前述设备,但又需要使用他们提供的功能,生成相应的数据,以提供给客户端(如浏览器所在的配有相关的显示设备、键盘和鼠标的主机)。

3. 如何使用和Headless mode?
一般是在程序开始激活headless模式,告诉程序,现在你要工作在Headless  mode下,就不要指望硬件帮忙了,你得自力更生,依靠系统的计算能力模拟出这些特性来:
System.setProperty("java.awt.headless", "true");


在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的。因为他返回当前路径的"."。

这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外)

在/home/admin/test/下新建admin.sh内容如下:

  1. cd `dirname $0`
  2. echo `pwd`
然后返回到/home/admin/执行
  1. sh test/admin.sh
运行结果:
  1. /home/admin/test
这样就可以知道一些和脚本一起部署的文件的位置了,只要知道相对位置就可以根据这个目录来定位,而可以不用关心绝对位置。这样脚本的可移植性就提高了,扔到任何一台服务器,(如果是部署脚本)都可以执行。

Linux 系统中,“!” 符号或者操作符通常被用做逻辑否定的操作符,同时也通过一些调整和改动命令来从历史记录中找出你需要的命令行。下面演示的命令行在bash Shell中都已经明确检查过可用了。不过我没有在其他的 Shell 解释器下测试过,不过我相信这些命令也不会在其他的解释器下运行。history 

! -1 倒数第一条 !-2倒数第二条


如果系统中开启了IPV6协议(比如window7),java网络编程经常会获取到IPv6的地址,这明显不是我们想要的结果,搜索发现很多蹩脚的做法是:禁止IPv6协议。其实查看官方文档有详细的说明:

在实际的运用中有以下几种办法可以实现指定获取IPv4的地址:在java启动命令中增加一个属性配置:-Djava.net.preferIPv4Stack=true

echo $JAVA_HOME获取java环境变量



JVM参数设置请参考

http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html


启动spark脚本  ./main.sh xxx.xxx

#!/bin/bash
cd `dirname $0`   参考如上说明
BIN_DIR=`pwd`   获取当前路径
echo $BIN_DIR   输出当前路径
cd ..                     回退到上一级目录
DEPLOY_DIR=`pwd`  然后获取路径
CONF_DIR=$DEPLOY_DIR/conf/META-INF/conf  组装配置文件路径
CONF_DIR_CONFIG=$CONF_DIR/config.properties 组装配置文件绝对路径
echo "CONF_DIR=$CONF_DIR"                                 输出路径

SPARK_CLASS=$1                                                      获取启动时 xxx.xxx参数,$0获取./main.sh
echo "SPARK_CLASS=$SPARK_CLASS"

#SPARK_CLASS=`sed '/spark.class/!d;s/.*=//' $CONF_DIR_CONFIG | tr -d '\r'`   
SPARK_MASTER=`sed '/spark.master/!d;s/.*=//' $CONF_DIR_CONFIG | tr -d '\r'`  获取配置文件中spark.class的值
SPARK_EXECUTOR_MEMORY=`sed '/spark.executor.memory/!d;s/.*=//' $CONF_DIR_CONFIG | tr -d '\r'`  获取配置文件中spark.executor.memory的值
SPARK_EXECUTOR_CORES=`sed '/spark.executor.cores/!d;s/.*=//' $CONF_DIR_CONFIG | tr -d '\r'` 
JOB_SHOWSTDOUT=`sed '/job.showstdout/!d;s/.*=//' $CONF_DIR_CONFIG | tr -d '\r'`

if [ ! -n "$SPARK_MASTER" ]; then                      如果SPARK_MASTER为空则退出
    echo "ERROR: SPARK_MASTER is empty"
    exit 1
fi

LOGS_DIR=""
LOGS_DIR=$DEPLOY_DIR/logs                         获取日志目录

if [ ! -d $LOGS_DIR ]; then
    mkdir $LOGS_DIR                                         不存在则创建日志目录
fi
STDOUT_FILE=$LOGS_DIR/stdout.log

echo "SPARK_MASTER=$SPARK_MASTER"
LIB_DIR=$DEPLOY_DIR/lib
LIB_JARS=`ls $LIB_DIR|grep .jar|awk '{print "'$LIB_DIR'/"$0}'|tr "\n" ":"`   循环遍历所有的jar,拼接如下x/xx/x.jar:/x/xx/y.jar

JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
if [ "$1" = "debug" ]; then                                                                              判断是否为debug模式
    JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
fi
JAVA_JMX_OPTS=""
if [ "$1" = "jmx" ]; then                                                                                     判断是否为debug模式
    JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
fi
JAVA_MEM_OPTS=""
BITS=`java -version 2>&1 | grep -i 64-bit`                                                     判断是否为64位
if [ -n "$BITS" ]; then
    JAVA_MEM_OPTS=" -server -Xmx2g -Xms2g -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
else
    JAVA_MEM_OPTS=" -server -Xms1gm -Xmx1g -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
fi

JOB_SHOW_TRUE="true"
echo -e "Starting the job ..."

if [ ! -n "$SPARK_CLASS" ]; then
echo "Params is empty, need all or spark class \c"
    exit 1
fi

JAVA_JRE_LIB="$LIB_DIR/sunec.jar"

if [ ! -f "$JAVA_JRE_LIB" ]; then
echo "Cope Jre jar"
cp $JAVA_HOME/jre/lib/ext/*.jar $LIB_DIR
fi

nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $CONF_DIR -Djava.ext.dirs=$LIB_DIR $SPARK_CLASS $CONF_DIR_CONFIG $LIB_DIR > $STDOUT_FILE 2>&1 &

echo "OK!"

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值