Raspberry Pi memulai program secara otomatis saat startup

22

Saya telah membangun jaringan sensor nirkabel yang terdiri dari dua Raspberry Pi (runnnig Raspbian) dengan sensor dan stasiun pangkalan Raspberry Pi yang mengumpulkan data.

Setiap kali saya ingin menjalankan sistem, saya harus masuk ke setiap unit sensor dan menjalankan dua program Python perulangan, satu untuk mengumpulkan data sensor dan satu lagi untuk mentransmisikan ke stasiun pangkalan.

Unit-unit ini pergi ke lokasi yang canggung tanpa akses internet sehingga membawa monitor, keyboard, dan mouse untuk menjalankannya tidaklah mudah. Apakah ada cara saya dapat mengaturnya untuk masuk secara otomatis, menjalankan program 1 dan kemudian menjalankan program 2 secara otomatis saat startup?

Kersakov
sumber

Jawaban:

15

Anda dapat menambahkan 2 program itu ke file rc.local. Ini akan menjalankannya saat startup. Info lebih lanjut dapat ditemukan di http://www.raspberrypi.org/documentation/linux/usage/rc-local.md .

Xer0FyT
sumber
3
Suatu hal yang tidak ada dalam dokumen itu yang tampaknya membuat orang tersandung: Jangan gunakan sudodengan rc.localsendirinya. Ini dijalankan dengan hak akses root saat boot. Pastikan untuk memperhatikan bagian tentang menggunakan &kecuali jika program Anda hanya melakukan sesuatu dengan cepat kemudian keluar.
goldilocks
Jika Anda ingin program Anda berjalan setelah jaringan naik, dan /path/to/somescript.sh &ke rc.local, dan dalam skrip tambahkan while ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done;sebelum memulai program Anda.
Tor Klingberg
+ goldilocks Masalahnya adalah Anda tidak dapat mencapai akses tulis rc.localtanpa menjalankan sudo sebelumnya. Apa yang Anda sarankan?
Rincewind
15

Jawaban oleh Xer0FyT mungkin adalah cara paling sederhana untuk secara otomatis memulai program pada PI. Tetapi masalah terjadi begitu program yang dijalankan macet karena alasan apa pun karena tidak dapat dimulai ulang, karena tidak ada proses pemantauan. Saya pribadi akan merekomendasikan menggunakan daemontools sebagai gantinya. Pengaturannya cukup sederhana (dan termasuk dalam Raspbian). Pada dasarnya Anda membuat direktori layanan yang berisi runskrip shell yang memulai program Anda. daemontools kemudian akan memastikan bahwa program Anda dimulai dan dimulai kembali jika crash karena alasan apa pun.

Pengaturan daemontools cukup sederhana. Hanya

apt-get install daemontools daemontools-run

Kemudian buat direktori layanan Anda yang berisi skrip run yang dapat dieksekusi:

# 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

Lihat /service/my-service/rundan edit, jadi ini memulai program Anda sendiri dan bukan berjalan echo. Setelah selesai, symlink direktori tersebut ke /etc/servicedaemontools secara otomatis (kembali) memulainya:

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

Setelah sekitar 5 detik, program Anda akan berjalan. Anda dapat memulai / menghentikannya menggunakan

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

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

Anda juga dapat masuk ke (misalnya) syslog. Jadi output dari program Anda tidak hilang. Saya menulis posting blog yang lebih lengkap tentang ini di sini: https://info-beamer.com/blog/running-info-beamer-in-production

dividuum
sumber
9
  1. Di Raspian klik Menu, Preferensi, Editor Menu Utama
  2. Klik Preferensi dan periksa Aplikasi default untuk LXSession
  3. Klik OK dan tutup editor menu utama
  4. Sekarang klik Menu dan Di Bawah Preferensi klik pada aplikasi Default untuk LXSession
  5. Konfigurasi LXSession terbuka
  6. Klik Mulai Otomatis
  7. Di bawah Manual aplikasi autostarted paste di baris perintah java Anda
  8. klik tambahkan
  9. tutup aplikasi konfigurasi LXSession dan reboot pi Anda

    aplikasi java Anda harus dijalankan setelah reboot

Palmeta
sumber
Saya pikir hanya sedikit lebih banyak detail diperlukan di sini
Darth Vader
Bekerja dengan baik untuk saya!
jbyrnes
Terima kasih @Palmeta! Saya punya satu program di autostart tetapi sebenarnya lupa di mana saya mengaturnya. Saya mencari kemana-mana. Dengan alat konfigurasi yang Anda jelaskan, saya akhirnya dapat menemukannya lagi dan menonaktifkannya: D! 100 poin
Pascal Lamers
2

Anda mungkin sudah cronmenginstal untuk beberapa tugas rumah tangga PI.

Cari man 5 crontabuntuk @reboot.


sumber
0

Anda mungkin ingin meneliti service. Anda dapat membuat skrip init yang merupakan bagian dari init sistem, dan meletakkannya di runlevel yang sesuai.

Lari man service.

Berikut ini adalah panduan untuk membuat skrip init: http://www.novell.com/coolsolutions/feature/15380.html

Bex
sumber
2
Sedihnya, dengan desakan mirip lemming ke systemdsebagian besar distribusi Linux, termasuk Raspbian, jawaban ini perlu diperbarui jika OP memperbarui sistem mereka sehingga mengambil alih dari sysV init... 8- (
SlySven
0

Ikuti saja tautan ini .

Dengan asumsi Anda memiliki test.txt di desktop, contohnya bisa:

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

dan itu berhasil!

Ehsan Ansari
sumber