いくつかの典型的なアプリケーションのシェル(10)ケース

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/wzj_110/article/details/100328143

説明

 ケース特別に書かれた文サービスの起動スクリプト

二つの例

さまざまな方法:RHEL6のRHEL7 /etc/init.dの経営スタイルと経営スタイルのsystemed

説明:これは、関連する演習を通ってくるためだけにあるの使用のケースをマスターします

注記について:どちら systemdに管理することにより、及びませんでした起動スクリプトは/etc/init.d/の下に置くことができ、手動で完了する必要があります提供!

スクリプト(1)nginxの起動スクリプトを開発し、カイからのブートを追加します

需求:通过case脚本模拟nginx服务启动关闭

/etc/init.d/nginx    {start|stop|reopen|reload}
#!/bin/bash
# 开机启动顺序
# ll /etc/rc.d/rc3.d/|grep 22 -->22可以(数字越靠前,优先级越高)-->开机和关闭的顺序
# chkconfig: 2345 32 62
# description: Nginx is a http server!


# 思路:定义三个模块(函数),然后case语句调用模块,实现相应的功能!

#(1)判断shell自带的库函数是否存在-->有则加载
[ -f /etc/init.d/functions ] && source /etc/init.d/functions
#(2)判断进程是否开启(nginx是否开启)-->pid文件-->里面有进程号或者端口(不靠谱)
pid_file=/usr/local/lnmp/nginx/logs/nginx.pid
#(3)定义函数-->模块
#(1)开启服务
Start_Nginx(){
	#(1)判断pid是否存在,存在则说明服务运行
  if [ -f $pid_file ];then
	echo "Nginx is running."
  else
	#(2)否则启动nginx
  /usr/local/lnmp/nginx/sbin/nginx &> /dev/null
  action "Nginx is starting."     /bin/true
  fi
}
#(2)关闭服务
Stop_Nginx(){
  #(1)判断pid是否存在-->存在则关闭
  if [ -f $pid_file ];then
        /usr/local/lnmp/nginx/sbin/nginx -s stop &> /dev/null
        action "Nginx is stopped."     /bin/true
    else
  #(2)不存在,否则表明已经关闭
  	action "Nginx is stopped."     /bin/true
  fi	
}
#(3)重启服务
Restart_Nginx(){
  	#(1)判断pid是否存在-->只有pid存在(服务开启)才会重新加载
  if [ -f $pid_file ];then
       /usr/local/lnmp/nginx/sbin/nginx -s reopen &> /dev/null
       action "Nginx is restarted."     /bin/true
    else
	#(2)提示用户
	echo "Can't Open $pid_file"
  fi
}
#(4)重新加载服务
Reload_Nginx(){
        #(1)判断pid是否存在-->只有pid存在(服务开启)才会重新加载
  if [ -f $pid_file ];then
       /usr/local/lnmp/nginx/sbin/nginx -s reload &> /dev/null
       action "Nginx is reload."     /bin/true
    else
        #(2)提示用户服务本身没有开启
        echo "Can't Open $pid_file"
  fi
}

##############case语句###################
case $1 in
	start)
	Start_Nginx
	RETVAL=$?
	;;
	stop)
	Stop_Nginx
	RETVAL=$?
	;;
	restart)
	# 另外一中方法-->先stop,然后再start-->这里用了系统脚本自带的
	Restart_Nginx
	RETVAL=$?
	;;
	reload)
	Reload_Nginx
	RETVAL=$?
	;;
	*)
	# 错误提示
	echo "USAGE:$0 {start|stop|restart|reload}"
	exit 1
esac
exit $RETVAL

ブート

chmod a+x /etc/init.d/nginx   

[root@server1 init.d]# ll /etc/rc.d/rc3.d/
total 0
lrwxrwxrwx. 1 root root 20 Aug 14 18:56 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 17 Aug 14 18:56 S10network -> ../init.d/network
lrwxrwxrwx  1 root root 15 Sep  2 18:57 S32nginx -> ../init.d/nginx
lrwxrwxrwx. 1 root root 15 Aug 14 18:56 S97rhnsd -> ../init.d/rhnsd

# 开启和关闭对应的数字没有被占用即可!

chkconfig --add nginx
chkconfig --list nginx
# 开机自启动
chkconfig nginx on

# reboot --->测试!

# 不用vim /etc/rc.d/rc.local 的方式编辑的方式!

フォロー

#(1)小细节
把/usr/local/lnmp/nginx/sbin/nginx命令作为一个变量存储,然后下面引用

#(2) 把冗余的封装成一个函数-->某个名称执行是否成功
wzj(){
    if [ $RETVAL - eq 0 ];then
          action "Nginx is $1"     /bin/true
    else
         action  "Nginx is't $1"     /bin/false
    fi
}
# 调用方式--->传递参数

wzj $1

chkconfig

# 7个运行级别对应的启动脚本! --> /etc/目录下

drwxr-xr-x. 2 root root  77 Sep  2 18:55 rc0.d
drwxr-xr-x. 2 root root  77 Sep  2 18:55 rc1.d
drwxr-xr-x. 2 root root  77 Sep  2 18:57 rc2.d
drwxr-xr-x. 2 root root  77 Sep  2 18:57 rc3.d
drwxr-xr-x. 2 root root  77 Sep  2 18:57 rc4.d
drwxr-xr-x. 2 root root  77 Sep  2 18:57 rc5.d
drwxr-xr-x. 2 root root  77 Sep  2 18:55 rc6.d

# 含义

等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动

ランレベルのファイル

# 每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释

# chkconfig: 2345 32 62
# description: Nginx is a http server!

(1)第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级,如果某服务缺省不在任何运行级启动,那么使用 – 代替运行级。

(2)第二行对服务进行描述,可以用\ 跨行注释

# 数字越靠前,关闭越靠前!

###########################################

# 验证:如何下次开机确定是再32开启和62关闭

# 本质创建连接文件

[root@server1 init.d]# ll /etc/rc3.d/ |grep 32
lrwxrwxrwx  1 root root 15 Sep  2 18:57 S32nginx -> ../init.d/nginx  #Start

頻繁に使用するコマンド

chkconfig --del nginx
chkconfig --list nginx        # 查看此服务的选项
chkconfig --add nginx         # 加入开机管理中
chkconfig nginx off           # 开机不自启
ll /etc/rc3.d/ | grep nginx   # 查看优先级,以及是否创建对应的软链接
chkconfig nginx on            # 开机自启

サービス、systemctl、chkconfigを

(2)のMySQL

要件:関数は、if文、case文は、MySQL近いスクリプトを起動し、シングル・インスタンスまたはマルチインスタンスの準備を達成するために!

(3)のrsync --->時間がありません

システムスクリプト学習の/etc/init.d/networkを:

#(1)用双引号

case "$1" in

#(2)用命令回传码

rc=$?

/etc/init.d/functions

おすすめ

転載: blog.csdn.net/wzj_110/article/details/100328143