-
复制或软连接脚本到/etc/init.d/目录下
-
将脚本添加到初始化执行的队列中去
注意如果脚本需要用到网络,则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
-
设置脚本文件的权限
$ sudo chmod 755 /etc/init.d/svnd.sh (注意一定要设置权限,不然开机不会启动)
-
执行如下命令将脚本放到启动脚本中去:
$ cd /etc/init.d
$ sudo update-rc.d svnd.sh defaults 95
注:其中数字95是脚本启动的顺序号,按照自己的需要相应修改即可。在你有多个启动脚本,而它们之间又有先后启动的依赖关系时你就知道这个数字的具体作用了。
- 卸载启动脚本的方法:
$ 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
说明1:nohup,该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。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 &