翼度科技»论坛 云主机 LINUX 查看内容

CentOS7-启动|重启|停止|状态服务脚本

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
源码编译安装方法

1、上传包nginx-1.10.0.tar.gz至服务端
  1. # 解压到工作目录
  2. [root@template ~]# tar xf nginx-1.10.0.tar.gz -C /usr/local/src/
  3. # 切换至Nginx目录下,找到configure
  4. [root@template ~]# cd /usr/local/src/
  5. [root@template src]# ll
  6. total 0
  7. drwxr-xr-x. 8 1001 1001 158 Apr 26  2016 nginx-1.10.0
  8. [root@template src]# cd nginx-1.10.0/
  9. [root@template nginx-1.10.0]# ll
  10. total 668
  11. drwxr-xr-x. 6 1001 1001   4096 Apr  2 17:25 auto
  12. -rw-r--r--. 1 1001 1001 262619 Apr 26  2016 CHANGES
  13. -rw-r--r--. 1 1001 1001 400302 Apr 26  2016 CHANGES.ru
  14. drwxr-xr-x. 2 1001 1001    168 Apr  2 17:25 conf
  15. -rwxr-xr-x. 1 1001 1001   2481 Apr 26  2016 configure
  16. drwxr-xr-x. 4 1001 1001     72 Apr  2 17:25 contrib
  17. drwxr-xr-x. 2 1001 1001     40 Apr  2 17:25 html
  18. -rw-r--r--. 1 1001 1001   1397 Apr 26  2016 LICENSE
  19. drwxr-xr-x. 2 1001 1001     21 Apr  2 17:25 man
  20. -rw-r--r--. 1 1001 1001     49 Apr 26  2016 README
  21. drwxr-xr-x. 9 1001 1001     91 Apr  2 17:25 src
复制代码
2、安装rpm包,查看他的脚本文件
  1. [root@node01 ~]# yum install nginx-1.10.0-1.el7.ngx.x86_64.rpm -y
复制代码
3、在rpm包上查看所属组信息
  1. [root@node01 ~]# id nginx
  2. uid=305(nginx) gid=305(nginx) groups=305(nginx)
复制代码
4、创建用户信息
  1. [root@template ~]# groupadd nginx -r -g 498
  2. [root@template ~]# useradd nginx -r -u 498 -g 498 -c "nginx user" -d /etc/nginx -s /sbin/nologin
复制代码
5、创建日志文件目录
  1. # 默认情况下是没有的
  2. [root@template nginx-1.10.0]# ll /var/log/nginx
  3. ls: cannot access /var/log/nginx: No such file or directory
  4. [root@template nginx-1.10.0]# mkdir /var/log/nginx
复制代码
6、可以用此选项查看编译过程需要的参数文件
  1. [root@template nginx-1.10.0]# ./configure --help
复制代码
7、编译,但是没有装一些环境,在编译中报错中缺什么安装什么包
  1. [root@template nginx-1.10.0]# ./configure \
  2. > --prefix=/etc/nginx \
  3. > --sbin-path=/usr/sbin/nginx \
  4. > --modules-path=/usr/lib64/nginx/modules \
  5. > --conf-path=/etc/nginx/nginx.conf \
  6. > --error-log-path=/var/log/nginx/error.log \
  7. > --http-log-path=/var/log/nginx/access.log \
  8. > --pid-path=/var/run/nginx.pid \
  9. > --lock-path=/var/run/nginx.lock \
  10. > --user=nginx --group=nginx \
  11. > --with-http_ssl_module \
  12. > --with-threads
  13. checking for OS
  14. + Linux 3.10.0-1160.el7.x86_64 x86_64
  15. checking for C compiler ... not found
  16. ./configure: error: C compiler cc is not found
复制代码
8、解决第一个报错信息,缺少C环境
  1. [root@template nginx-1.10.0]# yum install gcc gcc-c++ make -y
复制代码
9、调出命令继续编译,解决报错
  1. ./configure: error: the HTTP rewrite module requires the PCRE library.
  2. You can either disable the module by using --without-http_rewrite_module
  3. option, or install the PCRE library into the system, or build the PCRE library
  4. statically from the source with nginx by using --with-pcre=<path> option.
  5. # 安装一个对应库文件的开发包
  6. [root@template nginx-1.10.0]# yum install pcre-devel -y
复制代码
10、继续编译
  1. ./configure: error: SSL modules require the OpenSSL library.
  2. You can either do not enable the modules, or install the OpenSSL library
  3. into the system, or build the OpenSSL library statically from the source
  4. with nginx by using --with-openssl=<path> option.
  5. [root@template nginx-1.10.0]# yum install openssl-devel -y
复制代码
11、再次编译,最后make && make install
  1. [root@template nginx-1.10.0]# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-threads
  2. [root@template nginx-1.10.0]# make && make install
复制代码
12、修改pid
  1. logs/nginx.pid
复制代码
13、切换到/etc/init.d/脚本目录下编写Nginx脚本
  1. [root@template ~]# cd /etc/init.d/
  2. [root@template init.d]# cat nginx
  3. #!/bin/sh
  4. #
  5. # nginx - this script starts and stops the nginx daemin
  6. #
  7. # chkconfig:   - 85 15
  8. # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
  9. #               proxy and IMAP/POP3 proxy server
  10. # processname: nginx
  11. # config:      /www/wdlinux/nginx/conf/nginx.conf
  12. # pidfile:     /www/wdlinux/nginx/logs/nginx.pid
  13. # Url http://www.wdlinux.cn
  14. # Last Updated 2010.06.01
  15. # Source function library.
  16. . /etc/rc.d/init.d/functions
  17. # Source networking configuration.
  18. . /etc/sysconfig/network
  19. # Check that networking is up.
  20. [ "$NETWORKING" = "no" ] && exit 0
  21. nginx="/usr/local/nginx/sbin/nginx"
  22. prog=$(basename $nginx)
  23. NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
  24. NGINX_PID="/usr/local/nginx/logs/nginx.pid"
  25. [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
  26. lockfile=/var/lock/subsys/nginx
  27. start() {
  28.     [ -x $nginx ] || exit 5
  29.     [ -f $NGINX_CONF_FILE ] || exit 6
  30.     echo -n $"Starting $prog: "
  31.     daemon $nginx -c $NGINX_CONF_FILE
  32.     retval=$?
  33.     echo
  34.     #service php-fpm start
  35.     [ $retval -eq 0 ] && touch $lockfile
  36.     return $retval
  37. }
  38. stop() {
  39.     echo -n $"Stopping $prog: "
  40.     $nginx -s stop
  41.     echo_success
  42.     retval=$?
  43.     echo
  44.     #service php-fpm stop
  45.     [ $retval -eq 0 ] && rm -f $lockfile
  46.     return $retval
  47. }
  48. restart() {
  49.     stop
  50.     start
  51. }
  52. reload() {
  53.     configtest || return $?
  54.     echo -n $"Reloading $prog: "
  55.     $nginx -s reload
  56.     RETVAL=$?
  57.     echo
  58. }
  59. force_reload() {
  60.     restart
  61. }
  62. configtest() {
  63.   $nginx -t -c $NGINX_CONF_FILE
  64. }
  65. rh_status() {
  66.     status $prog
  67. }
  68. rh_status_q() {
  69.     rh_status >/dev/null 2>&1
  70. }
  71. case "$1" in
  72.     start)
  73.         rh_status_q && exit 0
  74.         $1
  75.         ;;
  76.     stop)
  77.         rh_status_q || exit 0
  78.         $1
  79.         ;;
  80.     restart|configtest)
  81.         $1
  82.         ;;
  83.     reload)
  84.         rh_status_q || exit 7
  85.         $1
  86.         ;;
  87.     force-reload)
  88.         force_reload
  89.         ;;
  90.     status)
  91.         rh_status
  92.         ;;
  93.     condrestart|try-restart)
  94.         rh_status_q || exit 0
  95.             ;;
  96.     *)
  97.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
  98.         exit 2
  99. esac
复制代码
14、增加脚本你的执行权限
  1. [root@template init.d]# chmod +x nginx
复制代码
15、添加到启动服务中
  1. [root@template init.d]# chkconfig --add nginx
  2. [root@template init.d]# chkconfig nginx  on
复制代码
16、测试

方式二:通过rpm包的脚本修改
  1. [root@node01 system]# cat nginx.service
  2. [Unit]
  3. Description=nginx - high performance web server
  4. Documentation=http://nginx.org/en/docs/
  5. After=network.target remote-fs.target nss-lookup.target
  6. [Service]
  7. Type=forking
  8. PIDFile=/run/nginx.pid
  9. ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
  10. ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
  11. ExecReload=/bin/kill -s HUP $MAINPID
  12. ExecStop=/bin/kill -s QUIT $MAINPID
  13. PrivateTmp=true
  14. [Install]
  15. WantedBy=multi-user.target
  16. [root@node01 system]# pwd
  17. /usr/lib/systemd/system
复制代码
参数说明:
  1. Unit:
  2. Description:描述信息
  3. After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反;
  4. Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit即无法激活;
  5. Wants:依赖到的其它units,弱依赖;
  6. Conflicts:定义units间的冲突关系。
  7. Service:
  8. Type:定义影响ExecStart及相关参数功能的unit进程启动类型;
  9. simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中;
  10. forking:由ExacStart启动的程序透过spawns延伸出其它子程序来作为此deamon的主要服务。原生父程序在启动结束后就会终止。
  11. oneshot:与simple类似,不过这个程序在完成工作后就结束,不常驻内存;
  12. dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作。因此通常也要同时设定BusName=才行;
  13. notify:在启动完成后会发送一个通知消息。还需要配合NotifyAccess来让Systemd接收消息;
  14. idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务。
  15. EnvironmentFile:环境配置文件;
  16. ExecStart:指明启动unit要运行命令或脚本的绝对路径;
  17. ExecStartPre:在ExecStart之前运行的绝对路径;
  18. ExecStartPost:在ExecStart之后运行的绝对路径;
  19. ExecStop:指明停止unit要运行的命令或脚本的绝对路径;
  20. Restart:当设定Restart=1时,则当次daemon服务意外终止后,会再次自动启动。
  21. PrivateTmp:true/false表示是否给服务分配独立的临时空间
  22. Install:
  23. Alias:别名,可使用systemctl command Alias.service
  24. RequiredBy:被哪些units所依赖,强依赖;
  25. WantedBy:被哪些units所依赖,弱依赖;
  26. Also:安装本服务的时候还要安装别的相关服务。
复制代码
出处:http://www.cnblogs.com/sre-chan/-------------------------------------------
个性签名:今天做了别人不想做的事,明天你就做得到别人做不到的事,尝试你都不敢,你拿什么赢!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

来源:https://www.cnblogs.com/sre-chan/p/17280849.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具