ตั้งค่าให้ Nginx เป็น Systemd service ใน Ubuntu

ในการลง nginx แบบคอมไฟล์เอง ไม่ได้ลงผ่าน manager (api, yum) นั้น หากมีการปิดเครื่องหรือรีสตาร์ nginx จะไม่ทำงานขึ้นมาโดยอัตโนมัติ โดยหากต้องการให้ nginx ทำงานโดยอัตโนมัตินั้นสามารถทำได้หลายวิธี แต่ในที่นี้จะทำโดยการสร้างให้เป็น systemd service

นอกเหนือจากการทำให้ nginx สามารถเปิดขึ้นมาโดยอัตโนมัติเมื่อปิดเปิดเครื่องแล้ว การทำให้เป็น Systemd service ยังมีประโยชน์อื่นหลายอย่าง เช่น ทำให้สามารถรันโดยใช้คำสั่ง service เพื่อดู status หรือสั่ง start, stop, restart ได้เป็นต้น

เริ่มต้นโดยการสร้างไฟล์ nginx.service ที่ /lib/systemd/system โดย

sudo vi /lib/systemd/system/nginx.service

และทำการตั้งค่า ดังนี้

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
User=root
Group=root
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
ExecStartPost=/bin/sleep 0.1

[Install]
WantedBy=multi-user.target

เปิดใช้งานเซอร์วิส โดย

sudo systemctl enable nginx

เสร็จแล้วควรลองรีสตาร์ทดูว่าเมื่อเปิดเครื่องกลับมาแล้ว nginx รันขึ้นมาไหม ซึ่งเราสามารถดูสถานะของการทำงานของ service นี้ได้โดยใช้คำสั่ง

sudo service nginx status
Error PID File

หากปรากฎ PID file error เมื่อรันคำสั่งดู status ให้ตรวจสอบการตั้งค่าในไฟล์ nginx.conf (ที่ /usr/local/nginx/conf/nginx.conf) ว่ามีการตั้งค่า path ของ PID ไฟล์หรือไม่ หากไม่มีให้เพิ่มบรรทัดใหม่ หรือหากมีแต่เป็นค่าอื่นก็ให้เปลี่ยนเป็นค่าดังนี้ pid /run/nginx.pid;

หรือสามารถสั่งเปิดปิดได้โดยคำสั่งอื่นๆ เช่น

sudo service nginx start

sudo service nginx stop

sudo service nginx restart