117.info
人生若只如初见

Ubuntu LNMP如何实现自动重启

在Ubuntu系统中,LNMP(Linux, Nginx, MySQL, PHP)堆栈的自动重启可以通过多种方式实现。以下是一些常见的方法:

1. 使用Systemd服务

Systemd是现代Linux发行版中用于管理系统服务的初始化系统和服务管理器。你可以为Nginx、MySQL和PHP-FPM创建Systemd服务,并配置它们在失败时自动重启。

Nginx

  1. 创建或编辑Nginx的Systemd服务文件:
    sudo nano /etc/systemd/system/nginx.service
    
  2. 确保文件内容如下:
    [Unit]
    Description=The NGINX HTTP and reverse proxy server
    After=syslog.target network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/run/nginx.pid
    ExecStartPre=/usr/sbin/nginx -t
    ExecStart=/usr/sbin/nginx
    ExecReload=/bin/kill -s HUP $MAINPID
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
  3. 重新加载Systemd配置并启动Nginx服务:
    sudo systemctl daemon-reload
    sudo systemctl start nginx
    sudo systemctl enable nginx
    

MySQL

  1. 创建或编辑MySQL的Systemd服务文件:
    sudo nano /etc/systemd/system/mysql.service
    
  2. 确保文件内容如下:
    [Unit]
    Description=MySQL Community Server
    After=network.target
    
    [Service]
    ExecStart=/usr/sbin/mysqld
    ExecReload=/bin/kill -s HUP $MAINPID
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
  3. 重新加载Systemd配置并启动MySQL服务:
    sudo systemctl daemon-reload
    sudo systemctl start mysql
    sudo systemctl enable mysql
    

PHP-FPM

  1. 创建或编辑PHP-FPM的Systemd服务文件:
    sudo nano /etc/systemd/system/php7.4-fpm.service
    
  2. 确保文件内容如下(根据你的PHP版本调整):
    [Unit]
    Description=The PHP FastCGI Process Manager
    After=syslog.target network.target
    
    [Service]
    Type=simple
    ExecStart=/usr/sbin/php-fpm7.4 --nodaemonize --fpm-config /etc/php/7.4/fpm/php-fpm.conf
    ExecReload=/bin/kill -USR2 $MAINPID
    
    [Install]
    WantedBy=multi-user.target
    
  3. 重新加载Systemd配置并启动PHP-FPM服务:
    sudo systemctl daemon-reload
    sudo systemctl start php7.4-fpm
    sudo systemctl enable php7.4-fpm
    

2. 使用Supervisor

Supervisor是一个进程控制系统,可以用来管理和监控多个进程。

  1. 安装Supervisor:
    sudo apt-get install supervisor
    
  2. 创建Supervisor配置文件:
    sudo nano /etc/supervisor/conf.d/nginx.conf
    
  3. 添加以下内容:
    [program:nginx]
    command=/usr/sbin/nginx
    autostart=true
    autorestart=true
    stderr_logfile=/var/log/nginx.err.log
    stdout_logfile=/var/log/nginx.out.log
    
  4. 重复上述步骤为MySQL和PHP-FPM创建配置文件。
  5. 更新Supervisor配置并启动进程:
    sudo supervisorctl reread
    sudo supervisorctl update
    sudo supervisorctl start nginx
    sudo supervisorctl start mysql
    sudo supervisorctl start php7.4-fpm
    

3. 使用Cron和Shell脚本

你可以编写一个简单的Shell脚本来检查进程是否运行,并在必要时重启它们,然后使用Cron定期运行这个脚本。

  1. 创建Shell脚本:
    sudo nano /usr/local/bin/lnmp_restart.sh
    
  2. 添加以下内容:
    #!/bin/bash
    
    # Check and restart Nginx
    if ! pgrep -x "nginx" > /dev/null
    then
        echo "Nginx is not running. Restarting..."
        sudo systemctl start nginx
    fi
    
    # Check and restart MySQL
    if ! pgrep -x "mysqld" > /dev/null
    then
        echo "MySQL is not running. Restarting..."
        sudo systemctl start mysql
    fi
    
    # Check and restart PHP-FPM
    if ! pgrep -x "php-fpm" > /dev/null
    then
        echo "PHP-FPM is not running. Restarting..."
        sudo systemctl start php7.4-fpm
    fi
    
  3. 赋予脚本执行权限:
    sudo chmod +x /usr/local/bin/lnmp_restart.sh
    
  4. 使用Cron每分钟运行一次脚本:
    crontab -e
    
  5. 添加以下行:
    * * * * * /usr/local/bin/lnmp_restart.sh
    

通过以上方法,你可以确保在Ubuntu系统中LNMP堆栈的各个组件在失败时能够自动重启。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe2f3AzsKCQVVDVA.html

推荐文章

  • Ubuntu如何解决Java安装失败问题

    在Ubuntu上解决Java安装失败问题,可以按照以下步骤进行排查和解决:
    1. 确认Java版本和系统兼容性 确保下载的Java版本与你的Ubuntu系统兼容。例如,如果你...

  • Ubuntu VirtualBox虚拟机如何加密

    在Ubuntu VirtualBox虚拟机中加密数据可以通过多种方法实现,以下是几种常见的方法:
    使用Ubuntu自带的加密工具Disks
    Ubuntu自带了一个名为"Disks"的磁...

  • ubuntu挂载分区出现错误

    当在Ubuntu中挂载分区时出现错误,可能有以下原因: 分区不存在或路径错误:请检查你输入的分区路径是否正确。使用lsblk或fdisk -l命令查看所有可用分区。 文件系...

  • Ubuntu Jenkins如何高效搭建

    在Ubuntu上高效搭建Jenkins的步骤如下:
    1. 安装Java环境
    Jenkins是基于Java开发的,因此在安装Jenkins之前,需要先安装Java环境。可以使用以下命令安...

  • Debian Java内存管理策略

    Debian操作系统本身并不直接管理Java的内存,Java的内存管理是由Java虚拟机(JVM)负责的。不过,了解Java的内存管理策略对于优化Java应用程序在Debian系统上的性...

  • Ubuntu挂载时遇到“挂载点已存在”怎么办

    当你在尝试挂载一个设备或分区到Ubuntu系统中的一个目录时,如果遇到“挂载点已存在”的错误,通常意味着你指定的挂载点目录已经存在,并且可能已经被其他文件系...

  • Debian Hadoop 资源如何管理

    在 Debian 操作系统上管理 Hadoop 集群的资源,主要依赖于 Hadoop 的资源管理器 YARN(Yet Another Resource Negotiator)。YARN 负责在 Hadoop 集群中管理资源以...

  • ubuntu compton与glxgears测试对比

    在Ubuntu系统中,Compton和GLXgears是两个不同的工具,它们分别用于不同的目的,因此直接对比它们的测试结果并不完全恰当。Compton是一个窗口合成器,主要用于改...