چگونه تنظیمات nginx را اتوماتیک reload کنیم؟

nginx
nginx

همانطور که می‌دانید تنظیمات nginx در etc/nginx/nginx.conf/ قرار دارد و اگر تغییری در آن فایل انجام شود باید nginx را با دستور nginx -s reload از این تغییرات آگاه سازیم درغیر اینصورت تغییرات اعمال نخواهد شد.

حال میخواهیم کاری کنیم که این کامند به‌صورت خودکار با تغییر یافتن فایل تنظیمات اجرا شود.

پس باید از تغییرات فایل nginx.conf آگاه شویم، این کار با استفاده از inotify امکان‌پذیر است. این inotify (inode notify) یک زیرسیستم هسته لینوکس است که توسط John McCutchan ایجاد شده است تا تغییرات سیستم فایل را نظارت کند و آن را به برنامه ها گزارش دهد. (monitoring filesystem events)

برای استفاده از inotify ابتدا tools آنرا نصب می کنیم:

sudo apt update
sudo apt install inotify-tools

بعد از تکمیل نصب، یک فایل در مسیر دلخواه و با نام nginx_reloader.sh ایجاد کنید و داخل آن اینها را قرار دهید:

#!/bin/bash
while true
do
    inotifywait --exclude .swp -e create -e modify -e delete -e move /etc/nginx/nginx.conf
    nginx -t
    if [ $? -eq 0 ]
    then
        echo &quotDetected Nginx Configuration Change&quot
        echo &quotExecuting: nginx -s reload&quot
        nginx -s reload
    fi
done

این اسکریپت در یک حلقه نامتناهی با استفاده از inotify تغییرات فایل nginx.conf را رصد می کند و در صورتی که تغییرات را دید ابتدا با کامند nginx -t سینتکس فایل را چک می کند تا خطایی نداشته باشد. اگر اوکی بود، با چاپ پیغام، کامند reload را اجرا می کند.

الان به این فایل باید مجوز اجرا را بدهیم:

chmod +x nginx_reloader.sh

حال کافیست این فایل را اجرا کنیم:

sudo ./nginx_reloader.sh

الان کافیست فایل تنظیمات nginx تغییر کند، خودش reload خواهد شد.