1. 复制或软连接脚本到/etc/init.d/目录下

  2. 将脚本添加到初始化执行的队列中去
    注意如果脚本需要用到网络,则NN需设置一个比较大的数字,如99。
    命令:update-rc.d xxx defaults NN命令 #(NN为启动顺序)

    ubuntu 16.04中一定要加上以下LSB信息,不然放入启动脚本的时候会报错无法开机启动。

    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:          svnd.sh
    # Required-start:    $local_fs $remote_fs $network $syslog
    # Required-Stop:     $local_fs $remote_fs $network $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts the svnd.sh daemon
    # Description:       starts svnd.sh using start-stop-daemon
    ### END INIT INFO
    
  3. 设置脚本文件的权限
    $ sudo chmod 755 /etc/init.d/svnd.sh (注意一定要设置权限,不然开机不会启动)

  4. 执行如下命令将脚本放到启动脚本中去:
    $ cd /etc/init.d
    $ sudo update-rc.d svnd.sh defaults 95

注:其中数字95是脚本启动的顺序号,按照自己的需要相应修改即可。在你有多个启动脚本,而它们之间又有先后启动的依赖关系时你就知道这个数字的具体作用了。

    1. 卸载启动脚本的方法:
      $ cd /etc/init.d
      $ sudo update-rc.d -f svnd.sh remove

脚本eg: canal-start-up.sh

#!/bin/bash
#
#https://wiki.debian.org/LSBInitScripts
### BEGIN INIT INFO
# Provides:          canal
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Should-Start:      $named
# Should-Stop:       $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start canal.
# Description:       Start the canal servlet engine.
### END INIT INFO
#export CANAL_HOME=$PATH
export CANAL_HOME=/opt/Canal/canal.deployer-1.1.3-SNAPSHOT
export CANAL_PID=$CANAL_HOME/canal.pid
umask  007

start() {
 echo "Starting canal ..."
 $CANAL_HOME/bin/startup.sh
}
stop() {
 echo "Stopping Canal ..."
 $CANAL_HOME/bin/stop.sh
}
status() {
 echo "Canal is running by PID $CANAL_PID"
}
case $1 in
  start|stop|status) $1;;
  restart) stop; start;;
  *) echo "Usage : $0 <start|stop|restart>"; exit 1;;
esac

exit 0

 

 

 

 

 

nohup bin/hive --service xxxx  >/dev/null 2>&1 &

 

 

 

模板脚本一:

在/home/sea/bin目录下创建脚本f1.sh

#! /bin/bash

case $1 in
"start"){
        for i in hadoop102 hadoop103
        do
                echo " --------启动 $i 采集flume-------"
                ssh $i "source /etc/profile; nohup /opt/module/flume/bin/flume-ng agent --conf-file /opt/module/flume/conf/file-flume-kafka.conf --name a1 -Dflume.root.logger=INFO,LOGFILE >/dev/null 2>&1 &"
        done
};;    
"stop"){
        for i in hadoop102 hadoop103
        do
                echo " --------停止 $i 采集flume-------"
                ssh $i "source /etc/profile; ps -ef | grep file-flume-kafka | grep -v grep |awk '{print \$2}' | xargs kill"
        done

};;
esac

 

说明1nohup,该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思,不挂断地运行命令。

说明2/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。

标准输入0:从键盘获得输入 /proc/self/fd/0 

标准输出1:输出到屏幕(即控制台) /proc/self/fd/1 

错误输出2:输出到屏幕(即控制台) /proc/self/fd/2

2)增加脚本执行权限

[atguigu@hadoop102 bin]$ chmod 777 f1.sh

3)f1集群启动脚本

[atguigu@hadoop102 module]$ f1.sh start

4)f1集群停止脚本

[atguigu@hadoop102 module]$ f1.sh stop

 

模板脚本二:

#! /bin/bash

case $1 in
"start"){
    echo " -------- 启动 集群 -------"
    echo " -------- 启动 hadoop集群 -------"
    /opt/module/hadoop-2.7.2/sbin/start-dfs.sh 
    ssh hadoop103 "source /etc/profile; /opt/module/hadoop-2.7.2/sbin/start-yarn.sh"
    #启动 Zookeeper集群
    zk.sh start

    sleep 4s;

    #启动 Flume采集集群
    f1.sh start

    #启动 Kafka采集集群
    kf.sh start

sleep 6s;

    #启动 Flume消费集群
    f2.sh start

    #启动 KafkaManager
    km.sh start
};;
"stop"){
    echo " -------- 停止 集群 -------"

    #停止 KafkaManager
    km.sh stop

    #停止 Flume消费集群
    f2.sh stop

    #停止 Kafka采集集群
    kf.sh stop

    sleep 6s;

    #停止 Flume采集集群
    f1.sh stop

    #停止 Zookeeper集群
    zk.sh stop

    echo " -------- 停止 hadoop集群 -------"
    ssh hadoop103 "source /etc/profile; /opt/module/hadoop-2.7.2/sbin/stop-yarn.sh"
    /opt/module/hadoop-2.7.2/sbin/stop-dfs.sh 
};;
esac

 

 

 

nohup bin/hive --service metastore >/dev/null 2>&1 &

posted on 2020-05-29 17:02  lshan  阅读(597)  评论(0编辑  收藏  举报