วิธีสร้าง service และ auto start service บน Ubuntu server

วิธีสร้าง service และ auto start service บน Ubuntu server

Apr 2, 2024 - 14:42
Apr 2, 2024 - 14:43
 13
วิธีสร้าง service และ auto start service บน Ubuntu server

เครดิต : https://medium.com/@wiboonklebkomut/%E0%B8%A7%E0%B8%B4%E0%B8%98%E0%B8%B5%E0%B8%AA%E0%B8%A3%E0%B9%89%E0%B8%B2%E0%B8%87-service-%E0%B9%81%E0%B8%A5%E0%B8%B0-auto-start-service-%E0%B8%9A%E0%B8%99-ubuntu-server-33c661254ccf

ในบทความนี้เราจะเปลี่ยน command ให้เป็น service และเปิดใช้งาน service ของเรารวมถึงการตั้งค่าให้ auto start service เมื่อ server มีการ reboot

ในบทความนี้จะทำ django ให้เปิดใช้งานตลอดเวลา

ขั้นตอนการสร้าง Service

1. เราจะเริ่มจากทดลองใช้ command ปกติของเราก่อน เช่น

cd django

source venv/bin/activate

python mange.py runserver 0.0.0.0:8000

เพื่อเปิดใช้งาน

2. สร้างไฟล์ .sh ขึ้นมาโดยนำ command ปกติใส่เข้าไป

https://miro.medium.com/v2/resize:fit:470/1*XCIV7al3T-LcKBWkWE5nKQ.png

จากนั้นเอาไฟล์นี้ขึ้นไปบน server แล้วสั่ง (ของผมตั้งชื่อเป็น script.sh)

$ bash script.sh

ถ้าเหมือนกับที่เราสั่งใช้งานเองได้แล้วถือว่าโอเค

3. จากนั้นกำหนดสิทธิไฟล์นี้โดย

$ chmod +x script.sh

4. เข้าไปที่ etc/systemd/system โดย

$ cd /etc/systemd/system

5. เมื่อเราเข้าไปใน path ด้านบนแล้วเราจะสร้างไฟล์ service ขึ้นมาโดย

$ sudo vim django.service

django.service เป็นชื่อไฟล์ของผม สามารถเปลี่ยนชื่อได้

6. มันจะเข้าไปใน ไฟล์ django.service แล้วให้กด i เพื่อ insert แล้วใส่ตามนี้เลย

[Unit]
Description=django
After=network.target

[Service]
ExecStart=/home/wiboon/script.sh
Restart=always
WorkingDirectory=/home/wiboon
User=wiboon
Group=wiboon

[Install]
WantedBy=multi-user.target

เมื่อใส่เสร็จแล้วกด Esc จะออกจากโหมด insert แล้วกด :wq จะเป็นการ save แล้วออกจากไฟล์

7. เราจะได้ไฟล์ service ของเรามา เราสามารถทดลองใช้ได้โดย

$ systemctl start django(ชื่อไฟล์ service)

สามารถเช็ค status ได้ด้วย

$ systemctl status django(ชื่อไฟล์ service)

และถ้าต้องการปิด service

$ systemctl stop django(ชื่อไฟล์ service)

เราอาจจะยังใช้งานไม่ได้จริงเพราะว่า ไฟล์ .sh ของเราอยู่ใน path ปกติของเรา ตัวอย่างเช่น home/wiboon แต่ในตอนนี้เราอยู่ใน etc/systemd/system ทำให้เมื่อ run service จะฟ้องว่าหา directory ไม่เจอ เราก็ต้องไปแก้ไขไฟล์ .sh ของเราทำให้ path ตรงกัน

ยกตัวอย่าง ผมก็ cd ../../.. ให้ถอยออกมาจาก folder etc/systemd/system

จากนั้น cd home/wiboon ทีนี้ directory ของเราก็จะเป็นตามปกติเราก็ใช้ command จากข้อ 1 ได้ปกติแล้ว ตามรูปภาพประกอบ

https://miro.medium.com/v2/resize:fit:456/1*tY8s6MERAELxpMMDyiY_rg.png

8. หลังจากทดลองเปิด-ปิด service ได้แล้ว เราจะทำให้ Auto start service ได้โดย

$ sudo systemctl enable django(ชื่อไฟล์ service ของเรา)

ทำให้ sure

$ sudo systemctl daemon-reload

ถ้าใช้งานได้ลอง reboot server ดูโดย

$ sudo reboot หรือ $ sudo systemctl restart django

แล้วกลับเช็ค status service ของเราดู

ถ้าขึ้นว่า update-rc.d error: xxxx Default-start contains…….

ให้ลองเข้าไปใน /etc/init.d แล้ว ls -l ดูว่ามีไฟล์ชื่อซ้ำกับ service หรือป่าว ถ้ามีก็ลบทิ้งโดย $ sudo rm filename

ทั้งหมดก็มีแค่นี้ลองปรับใช้กันดูครับผมก็มือใหม่เหมือนกัน :)

 

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow