如何为Nginx服务添加初始化脚本

时间:2020-03-21 11:43:58  来源:igfitidea点击:

如果使用yum软件包管理器或者使用rpm(通过下载并安装nginx软件包的.rpm)来安装nginx,如如何在rhel和centos中安装nginx所述,则无需添加初始化脚本即可启动,重新启动并停止该服务。
因为从软件包管理器进行安装时,nginx会将init脚本添加到所需的正确位置。

因此,在这种情况下,我们可以使用service命令或者使用/etc/init.d/nginx <options>命令来启动,停止,重新启动,重新加载等操作。

但是,如果我们使用源软件包安装nginx,则用于启动,停止,重新加载nginx进程的二进制文件就位于安装前缀的sbin目录中。
因此,在这种情况下,如果没有创建和初始化脚本,我们将无法将其添加到不同的运行级别,也无法使用简单的命令行参数重新启动(我们甚至可以添加sbin nginx脚本以在启动时通过放置简单的脚本来启动在rc.local文件中)。

在本文中,我们将为nginx创建一个初始化脚本。

什么是初始化脚本?

让我们了解什么是初始化脚本。
初始化脚本也称为服务启动脚本。
通过使用某些标准,此脚本可用于在引导时开始停止。

如果告诉守护程序或者进程在特定的linux运行级别启动,它将通过使用start命令启动,否则我们甚至可以从shell提示中调用init脚本来启动和停止。

[root@theitroad ~]# /etc/init.d/httpd restart

在上面的示例中,我们调用了httpd初始化脚本来重新启动httpd进程。

如何为Nginx创建初始化脚本?

现在让我们为nginx创建我们的初始化脚本。
让我们进入/etc/init.d目录并创建一个名为nginx的文件。
我们需要对bash shell脚本有基本的了解,才能了解以下init脚本。
特别是bash脚本中的以下内容应明确。

1.定义变量

2.定义函数并在脚本中调用它们

3.case语句

我们用于nginx的初始化脚本非常简单,我们将在shell脚本中使用命令<prefix>/sbin/nginx来启动,停止和重新启动nginx服务。

[root@theitroad init.d]# cat nginx
#! /bin/sh
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME
test -x $DAEMON || exit 0
d_start() {
$DAEMON || echo -n " already running"
}
d_stop() {
$DAEMON -s quit || echo -n " not running"
}
d_reload() {
$DAEMON -s reload || echo -n " could not reload"
}
case "" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
reload)
echo -n "Reloading $DESC configuration..."
d_reload
echo "reloaded.";;
restart)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 2
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
exit 3
;;
esac
exit 0

注意:以上脚本假定我们已在/usr/local目录中安装了nginx,如果已在其他位置安装了nginx,则需要更改脚本中的路径。

现在,让我们了解nginx初始化脚本。

我们已经定义了变量

NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME

“ NAME”变量告诉脚本服务的名称,该“ NAME”变量将用于显示消息,例如“重新启动nginx守护进程nginx”等。

DAEMON变量告诉脚本该脚本是我们用来启动和停止安装前缀的实际脚本。
通常是/usr/local/nginx/sbin/nginx。
我们在DAEMON中使用了“ $NAME”而不是“ nginx”,因为“ $NAME”与“ nginx”相同

SCRIPTNAME变量将用于描述脚本的用法。

d_start()是我们定义的函数,它将运行命令/usr/local/nginx/sbin/nginx来启动nginx服务,如果失败,它将抛出一条消息“已经运行”

d_stop()是我们定义的函数,它将运行命令/usr/local/nginx/sbin/nginx -s quit命令。
如果失败,则抛出一条消息“未运行”。

d_reload()是我们定义的用于使用/usr/local/nginx/sbin/nginx -s reload命令重新加载nginx的函数。

现在,为传递给命令的不同参数定义了case语句,例如

1.如果运行/etc/init.d/nginx start,执行什么(基本上case语句将调用我们定义的用于执行事物的函数之一)。

2.如果运行/etc/init.d/nginx stop,执行什么(它将再次调用我们的函数之一)

如果/etc/init.d/nginx提供了除“ start”,“ stop”,“ restart”,“ reload”以外的其他命令,则还会有一个case语句。
它将显示可用的使用选项。

现在,在创建脚本之后,我们可以在Red Hat系统中使用ntsysv的chkconfig命令将其添加到所需的运行级别。