How to Run Startup Program On Raspberry Pi

ByPatradanai Nakpimay913Day ago

Share :

ยินดีตอนรับเข้าสู่โลกของ Raspberry pi

เพื่อไม่ให้เป็นการเสียเวลา → มาถึงก็เข้าเรื่องกันเลยตามหัวข้อจะเป็นการพูดถึง วิธีการ Run program on startup of Raspberry pi. เมื่อเรามี Programs ที่ต้องการให้ทำงานตอน "Start up" Raspberry pi

มีทั้งหมด 4 วิธีการ

  1. rc.local
  2. /etc/init.d
  3. systemd
  4. croncap

โดยก่อนจะเริ่ม ทางเราได้ทำการเตรียม 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

Method 1. ใช้งาน rc.local

ทำการ Edit file /etc/rc.local โดยการรันโดย root permissions

sudo nano /etc/rc.local

จากนั้นทำการ Add commands บรรดทัดสุดท้ายก่อน exit 0 and save file ( Ctrl + X→ Y )

img

โดยถ้าหากต้องการให้ script continuously run ให้ทำการใส่ “&” ปิดท้าย command

sudo /usr/bin/python3 /home/pi/ipAddr/ipAddr.py &

ทำการ Restart raspberry pi

sudo reboot

Method 2. การใช้งาน /etc/init.d

วิธีที่ 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

ขั้นตอน 3 : ทำการ configure systemd

ขั้นตอนนี้จะเป็นการ เรียกใช้งาน .service ที่สร้างมาเพื่อให้ ทำงานตอน start up

sudo systemctl deamon-reload
sudo systemctl enable /home/pi/ipAddr/ipAddr.service

จากนั้นทำการ Reboot

sudo reboot

วิธีการ log

sudo systemctl status ipAddr

Method 4. การใช้งาน Crontab

เริ่มต้นใช้งาน 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 โดยแต่ละวิธีการเลือกใช้งานขึ้นอยู่กับรูปแบบการนำไปใช้งานและความชอบของผู้ใช้งาน


You may also like,

Patradanai Nakpimay

full stack developer

  • Phone: +668-3949-1651
  • E-mail: patradanai_n@hotmail.com

© 2021 PATRADANAI NAKPIMAY. All Rights Reserved