วิธีที่1 Terminal
เปิด terminal แล้วพิมพ์pgrep ตามด้วยชื่อโปรแกรม เช่น pgrep TagAgent
ก็จะได้เลข PID ออกมา ซึ่งเป็นเลข process ของโปรแกรม
วิธีที่2 Shell script (ไม่แนะนำ เนื่องจากพลาดได้บางครั้ง)
ในการเขียน shell script การใช้เครื่องหมายต่างๆ, การเว้นวรรค มีผลต่อการเขียนโปรแกรมจำเป็นต้องศึกษาการใช้งานสักเล็น้อย ก่อนใช้งาน
สร้างไฟล์ขึ้นมาโดยพิมพ์ nano check_process.sh
#!/bin/bash
sudo rm /tmp/TagAgent.pid
pidof TagAgent >> /tmp/TagAgent.pid
while IFS= read -r line; do
echo "Text read from file: $line"
done <
/tmp/TagAgent.pid
Shell script ตรวจสอบโปรแกรม
ถ้าเราต้องการตรวจสอบว่าโปรแกรมรันอยู่หรือไม่ แล้วถ้าไม่รัน ก็สั่งให้เปิดโปรแกรม ให้ทำดังนี้nano monitor-process.sh
#!/bin/bash
sudo rm /tmp/TagAgent.pid
sudo pidof TagAgent >> /tmp/TagAgent.pid
declare -i x=0
while IFS= read -r line; do
if [ $line != "" ]
then
echo "Text: $line"
x=$((x+1))
else
echo "No text"
fi
done < /tmp/TagAgent.pid
if [ $x == 0 ]
then
cd /home/pi/TagAgent
sudo ./TagAgent &
else
echo "run"
fi
เมื่อเราสร้างไฟล์ Script แล้ว ต้องทำให้ไฟล์นี้รันได้
sudo chmod +x monitor-process.sh
และก็ต้องตั้งเวลาให้ไฟล์ตัวนี้รันทุกๆ 1 นาที
เราสามารถทำได้โดยใช้ Crontab ดังนี้
พิมพ์ crontab -e
บรรทัดล่างสุด ให้เพิ่ม
* * * * * /home/pi/monitor-process.sh
กด control + o, control+x
sudo /etc/init.d/cron restart
ในรูปนี้พลาดไปอย่างนึง คือมันจะ reboot ทุกๆนาทีตอนตี 2 หมายความว่า 2.00 น., 2.01 น., 2.02 น. ... จะ reboot ตลอดทุกนาที จนกว่าจะถึงเวลาตี 3
ดังนั้นถ้าจะแก้ให้ถูกต้อง คือ reboot แค่ครั้งเดียวตอนตี 2 จะต้องแก้เป็น
0 2 * * * sudo reboot
และจากการทดสอบใช้จริง การใช้ pidof จาก shell script (วิธีที่2) มันจะมีการเช็คพลาดบางครั้ง
ดังนั้น จึงไม่แนะนำให้ใช้ วิธีการนี้ครับ
จบ
ที่มา
https://stackoverflow.com/questions/10929453/read-a-file-line-by-line-assigning-the-value-to-a-variable
https://linuxize.com/post/how-to-remove-files-and-directories-using-linux-command-line/
https://bash.cyberciti.biz/guide/Create_an_integer_variable
https://askubuntu.com/questions/682913/how-to-write-shell-script-to-start-some-programs