Portfolio
ByPatradanai Nakpimay913Day ago
ยินดีตอนรับเข้าสู่โลกของ Raspberry pi
เพื่อไม่ให้เป็นการเสียเวลา → มาถึงก็เข้าเรื่องกันเลยตามหัวข้อจะเป็นการพูดถึง วิธีการ Run program on startup of Raspberry pi. เมื่อเรามี Programs ที่ต้องการให้ทำงานตอน "Start up" Raspberry pi
โดยก่อนจะเริ่ม ทางเราได้ทำการเตรียม Script python เพื่อทดลอง
import paho.mqtt.client as mqtt import time import os if __name__ == "__main__": host = "XXX-700-XXXXX.XXX.CO.TH" port = 1883 client = mqtt.Client("Rasp1") client.connect(host) f = os.popen('ifconfig wlan0 | grep "inet 163" | cut -c 14-26') myip=f.read() print(myip) while True: client.loop_start() client.publish("ipAddr/Rasp/NPMSA414", str(myip)) time.sleep(60) client.loop_stop()
Python Script ด้านบนเป็นการใช้งานให้ Raspberry pi ส่ง ipAddr กลับไปที่ MQTT Broker ในกรณีที่ใช้งานใน Company ที่ไม่สามารถ Static IP
/home/pi/ipAddr/ipAddr.py
ทำการ Edit file /etc/rc.local โดยการรันโดย root permissions
sudo nano /etc/rc.local
จากนั้นทำการ Add commands บรรดทัดสุดท้ายก่อน exit 0 and save file ( Ctrl + X→ Y )
โดยถ้าหากต้องการให้ script continuously run ให้ทำการใส่ “&” ปิดท้าย command
sudo /usr/bin/python3 /home/pi/ipAddr/ipAddr.py &
ทำการ Restart raspberry pi
sudo reboot
วิธีที่ 2 การรันผ่าน /etc/init.d โดยการนำ สร้าง script ไปไว้ที่ /etc/init.d
sudo nano /etc/init.d/ipAddr เมื่อทำการย้าย Script เสร็จให้ทำการ Edit Script editor ( ผมเลือกใช้งาน nano )
เพื่อทำการเพิ่ง script linux standard base ( LSB ) สำหรับ init script
# /etc/init.d/ipAddr.py ### BEGIN INIT INFO # Provides: ipAddr.py # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO case "$1" in start) echo "Start Application" sudo /usr/bin/python3 /home/pi/ipAddr/ipAddr.py ;; stop) echo "Stop Application" /usr/bin/python3 -kill :1 ;; *) echo "Usage: /etc/init.d/startApp {start|stop}" exit 1 ;; esac exit 0
จากนั้นทำให้เป็น executable file
cd /etc/init.d/ sudo chmod +x ipAddr sudo update-rc.d ipAddr defaults sudo reboot
ขั้นตอนการเรียกใช้งานผ่าน start|stop
sudo /etc/init.d/ipAddr start
sudo /etc/init.d/ipAddr stop
Method 3. การใช้งาน Systemd
ขั้นตอนที่ 3 เป็นใช้งาน systemd files ในการ start up python script
ขั้นตอน 1 : ทำการสร้าง .service ขึ้นมา
sudo nano /home/pi/ipAddr/ipAddr.service
แล้วทำการเพิ่ม Code
[Unit] Description=My Sample Service After=multi-user.target [Service] Type=idle ExecStart=/usr/bin/python3 /home/pi/ipAddr/ipAddr.py Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
ตั้งค่า permission chmod 644 ให้กับ file
sudo chmod 644 /home/pi/ipAddr/ipAddr.service
ขั้นตอนนี้จะเป็นการ เรียกใช้งาน .service ที่สร้างมาเพื่อให้ ทำงานตอน start up
sudo systemctl deamon-reload
sudo systemctl enable /home/pi/ipAddr/ipAddr.service
จากนั้นทำการ Reboot
sudo reboot
วิธีการ log
sudo systemctl status ipAddr
เริ่มต้นใช้งาน Crontab โดยจะต้อง open in root
sudo crontab -e
จากนั้นทำการเพิ่ม command ที่ บรรทัดล่างสุดที่จะใช้ run script python ตอน start up
@reboot sudo python /home/pi/ipAddr/ipAddr.py /home/pi/ipAddr/log.txt
จากนั้นทำการ save and reboot raspberry pi
sudo reboot
เมื่อ restart pi เสร็จจะพบว่ามีการสร้างไฟล์ log.txt ขึ้นมา
สามารถ Check syslog ได้ถ้าเกิดปัญหา
grep cron /var/log/syslog
Conclusion
วิธีทั้งหมดขึ้นที่ยกตัวอย่างมา ใช้เวลาต้องการเรียกใช้งานโปรแกรมเมื่อ Start up สำหรับ raspberry pi โดยตัวอย่างเป็นการเรียกใช้งาน script python โดยแต่ละวิธีการเลือกใช้งานขึ้นอยู่กับรูปแบบการนำไปใช้งานและความชอบของผู้ใช้งาน