简述
许多 Linux 系统服务都可以通过 service 命令来进行控制,比如 service network reload 命令等,其中 service 命令第 1 个参数是服务的名字,第 2 个参数是具体的操作(如 start,restart 等)。
在 centos 系统中,service 命令实际是调用了 /etc/init.d 目录中的 shell 脚本,也就是说,如下 2 条命令其实是等价的。
# 直接执行脚本
/etc/init.d/netword restart
# 通过 service 命令执行脚本
service network restart
在上述命令中,nerwork 是 shell 脚本的文件名,restart 是传递给脚本的参数。
示例
至此,我们可以自己写一个 shell 脚本来添加到系统服务中,比如我们写一个关于 nginx 的启动,停止,重启的命令。
我们可以假设我们要写的命令最后是这样的执行的:
service my-nignx start
我们在 /etc/init.d 目录下新建一个文件 my-nginx,将一下代码粘贴进去:
#!/bin/bash
DAEMON=/usr/local/nwei/nginx/sbin/nginx
case "$1" in
start)
echo "Starting nginx daemon..."
$DAEMON && echo "SUCCESS"
;;
stop)
echo "Stopping nginx deamon..."
$DAEMON -s quit && echo "SUCCESS"
;;
reload)
echo "Reloading nginx deamon"
$DAEMON -s reload && echo "SUCCESS"
;;
restart)
echo "Restarting nginx deamon"
$DAEMON -s quit
$DAEMON && echo "SUCCESS"
;;
*)
echo "Usage:service nginx{start|stop|reload|restart}"
exit 2
;;
esac
然后修改脚本执行权限:
chmod +x my-nginx
如下:
这样我们就可以使用我们自己的系统服务命令来操作 nginx 了。
脚本说明
#!
定义解释此脚本的 shell 路径。
“$1” 是 shell 预定义的参数变量,用于接收传入的参数,数字 1 表示用户输入的第 1 个参数。
case 语句中 *)
可以理解成默认。
设置开机自启动
添加 chkconfig:35 85 15
到脚本中
在执行
chkconfig --add my-ngnix
说明
35 表示允许启动的级别是 3 和 5 ,若暂不开启任何启动级别可以设置横线 “-” 代替。85 和 15 用户设置服务的启动 (S) 和关闭 (K) 顺序,数值小的先执行。对于底层服务一般 S 值小 K 值大,对于普通服务,一般 S 值大 K 值小。