Raspberry Pi โปรแกรมเริ่มต้นโดยอัตโนมัติเมื่อเริ่มต้น


22

ฉันสร้างเครือข่ายเซ็นเซอร์ไร้สายซึ่งประกอบด้วย Raspberry Pi สองตัว (runnnig Raspbian) ที่มีเซ็นเซอร์อยู่และสถานีฐาน Raspberry Pi ที่รวบรวมข้อมูล

ทุกครั้งที่ฉันต้องการเรียกใช้ระบบฉันต้องลงชื่อเข้าใช้แต่ละหน่วยเซ็นเซอร์และเรียกใช้โปรแกรม Python แบบวนซ้ำสองรายการหนึ่งรายการเพื่อรวบรวมข้อมูลเซ็นเซอร์และอีกรายการหนึ่งสำหรับการส่งสัญญาณไปยังสถานีฐาน

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

คำตอบ:


15

คุณสามารถเพิ่ม 2 โปรแกรมเหล่านี้ไปยังไฟล์ rc.local สิ่งนี้จะเรียกใช้เมื่อเริ่มต้น ข้อมูลเพิ่มเติมสามารถพบได้ที่http://www.raspberrypi.org/documentation/linux/usage/rc-local.md


3
จุดที่ไม่อยู่ในเอกสารนั้นซึ่งดูเหมือนว่าจะไปเยี่ยมผู้คน: อย่าใช้sudoในrc.localตัวมันเอง มันรันด้วยสิทธิพิเศษรูทเมื่อบูต ตรวจสอบให้แน่ใจว่าได้ใส่ใจกับส่วนที่เกี่ยวกับการใช้งาน&เว้นแต่ว่าโปรแกรมของคุณจะทำอะไรบางอย่างได้อย่างรวดเร็วแล้วออก
goldilocks

หากคุณต้องการให้โปรแกรมของคุณทำงานหลังจากเครือข่ายพร้อมทำงานและ/path/to/somescript.sh &ถึงrc.localและในสคริปต์เพิ่มwhile ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done;ก่อนเริ่มโปรแกรมของคุณ
Tor Klingberg

+ goldilocks ปัญหาคือคุณไม่สามารถเข้าถึงการเขียนได้rc.localโดยไม่ต้องใช้ sudo ล่วงหน้า คุณแนะนำอะไร?
Rincewind

15

คำตอบโดย Xer0FyT น่าจะเป็นวิธีที่ง่ายที่สุดในการเริ่มโปรแกรมบน PI โดยอัตโนมัติ แต่ปัญหาเกิดขึ้นเมื่อโปรแกรมเริ่มทำงานล้มเหลวไม่ว่าด้วยเหตุผลใดเพราะจะไม่เริ่มต้นใหม่เนื่องจากไม่มีการตรวจสอบกระบวนการ ฉันเองจะแนะนำให้ใช้daemontoolsแทน มันค่อนข้างง่ายในการตั้งค่า (และรวมอยู่ใน Raspbian) โดยทั่วไปคุณสร้างไดเรกทอรีบริการที่มีrunเชลล์สคริปต์ที่เริ่มต้นโปรแกรมของคุณ จากนั้น daemontools จะตรวจสอบให้แน่ใจว่าโปรแกรมของคุณเริ่มต้นและเริ่มการทำงานใหม่หากเกิดข้อผิดพลาดไม่ว่าด้วยเหตุผลใดก็ตาม

การตั้ง daemontools เป็นเรื่องง่าย เพียงแค่

apt-get install daemontools daemontools-run

จากนั้นสร้างไดเรกทอรีบริการของคุณที่มีสคริปต์เรียกใช้งานได้:

# create the service directory
mkdir -p /service/my-service

# create the run script
cat > /service/my-service/run <<EOF
#!/bin/sh
echo "I'm an example service executed by daemontools"
sleep 1
# Replace those 2 lines with a real call to your program like this:
# exec /my/program.py --arguments
EOF

# make it executable
chmod 755 /service/my-service/run

มีลักษณะที่และแก้ไขมันเพื่อให้มันเริ่มโปรแกรมของคุณเองแทนที่จะทำงาน/service/my-service/run echoเมื่อเสร็จแล้วให้เชื่อมโยงไดเรกทอรี/etc/serviceนั้นเข้ากับdaemontools โดยอัตโนมัติ (ใหม่) เริ่มต้น:

cd /etc/service
ln -s /service/my-service .

หลังจากนั้นประมาณ 5 วินาทีโปรแกรมของคุณควรจะทำงาน คุณสามารถเริ่ม / หยุดโดยใช้

# stop it
$ svc -d /service/my-service

# start it
$ svc -u /service/my-service

นอกจากนี้ยังเป็นไปได้ที่จะเข้าสู่ระบบ (ตัวอย่าง) syslog ดังนั้นผลลัพธ์ของโปรแกรมของคุณจะไม่สูญหาย ฉันเขียนโพสต์บล็อกที่สมบูรณ์มากขึ้นเกี่ยวกับเรื่องนี้ที่นี่: https://info-beamer.com/blog/running-info-beamer-in-production


9
  1. ใน Raspian คลิกที่ Menu, Preferences, Main Menu Editor
  2. คลิกการตั้งค่าและตรวจสอบแอปพลิเคชันเริ่มต้นสำหรับ LXSession
  3. คลิกตกลงและปิดตัวแก้ไขเมนูหลัก
  4. ตอนนี้คลิกเมนูและภายใต้การตั้งค่าคลิกที่แอปพลิเคชันเริ่มต้นสำหรับ LXSession
  5. การกำหนดค่า LXSession เปิดขึ้น
  6. คลิกเริ่มอัตโนมัติ
  7. ภายใต้แอปพลิเคชันที่เริ่มอัตโนมัติด้วยตนเองวางในบรรทัดคำสั่ง java ของคุณ
  8. คลิกเพิ่ม
  9. ปิดแอ็พพลิเคชันการกำหนดค่า LXSession และรีบูตไพของคุณ

    แอป Java ของคุณควรทำงานหลังจากรีบูต


ฉันคิดว่าต้องมีรายละเอียดเพิ่มเติมเล็กน้อยที่นี่
Darth Vader

ทำงานได้ดีสำหรับฉัน!
jbyrnes

ขอบคุณ @Palmeta! ฉันมีโปรแกรมหนึ่งใน autostart แต่จริง ๆ แล้วลืมที่ฉันตั้งไว้ ฉันดูทุกที่ ด้วยเครื่องมือการกำหนดค่าที่คุณอธิบายในที่สุดฉันก็สามารถค้นหาได้อีกครั้งและปิดการใช้งาน: D! 100 คะแนน
Pascal Lamers

2

คุณอาจcronติดตั้งแล้วสำหรับงานทำความสะอาดของ PI บางส่วน

ค้นหาสำหรับman 5 crontab@reboot


0

serviceคุณอาจต้องการที่จะวิจัย คุณสามารถสร้างสคริปต์เริ่มต้นที่เป็นส่วนหนึ่งของระบบเริ่มต้นและวางไว้ในระดับที่เหมาะสม

man serviceวิ่ง

นี่คือแนวทางในการสร้างสคริปต์ init: http://www.novell.com/coolsolutions/feature/15380.html


2
น่าเศร้าที่การเร่งความเร็วเหมือนsystemdการกระจาย Linux ส่วนใหญ่รวมถึง Raspbian คำตอบนี้จะต้องอัปเดตหาก OP อัปเดตระบบของพวกเขาเพื่อรับช่วงต่อจากinit
sysV

0

เพียงไปที่ลิงก์นี้

สมมติว่าคุณมี test.txt บนเดสก์ท็อปอาจเป็นตัวอย่าง:

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
@leafpad /home/pi/Desktop/test.txt

และมันใช้งานได้!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.