Raspberry Pi tự động khởi động chương trình khi khởi động


22

Tôi đã xây dựng một mạng cảm biến không dây bao gồm hai Raspberry Pi (runnnig Raspbian) với các cảm biến trên và một Raspberry Pi trạm gốc thu thập dữ liệu.

Mỗi lần tôi muốn chạy hệ thống, tôi phải đăng nhập vào từng đơn vị cảm biến và chạy hai chương trình Python lặp, một để thu thập dữ liệu cảm biến và một để truyền đến trạm gốc.

Các đơn vị này đang đi vào các địa điểm khó xử không có truy cập Internet nên việc mang theo màn hình, bàn phím và chuột để giúp chúng chạy không chính xác. Có cách nào tôi có thể thiết lập chúng để tự động đăng nhập, chạy chương trình 1 và sau đó chạy chương trình 2 tự động khi khởi động không?

Câu trả lời:


15

Bạn có thể thêm 2 chương trình đó vào tệp RC.local. Điều này sẽ chạy chúng khi khởi động. Thông tin thêm có thể được tìm thấy tại http://www.raspberrypi.org/documentation/linux/usage/rc-local.md .


3
Một điểm không ở chỗ doc mà dường như vấp người lên: Không sử dụng sudotrong rc.localchính nó. Nó được chạy với quyền root khi khởi động. Hãy chắc chắn chú ý đến phần về việc sử dụng &trừ khi chương trình của bạn chỉ cần thực hiện một cái gì đó nhanh chóng sau đó thoát ra.
goldilocks

Nếu bạn muốn chương trình của bạn để chạy sau khi mạng đang gia tăng, và /path/to/somescript.sh &đến rc.local, và trong kịch bản add while ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done;trước khi bắt đầu chương trình của bạn.
Tor Klingberg

+ goldilocks Vấn đề là bạn không thể đạt được quyền truy cập ghi rc.localmà không cần chạy sudo trước. Bạn có đề nghị gì?
Rincewind

15

Câu trả lời của Xer0FyT có lẽ là cách đơn giản nhất để tự động bắt đầu một chương trình trên PI. Nhưng vấn đề xảy ra khi chương trình bắt đầu gặp sự cố vì bất kỳ lý do gì vì nó sẽ không được khởi động lại, vì không có giám sát quá trình. Cá nhân tôi khuyên bạn nên sử dụng daemontools thay thế. Việc cài đặt khá đơn giản (và được bao gồm trong Raspbian). Về cơ bản, bạn tạo một thư mục dịch vụ chứa runtập lệnh shell khởi động chương trình của bạn. daemontools sau đó sẽ đảm bảo rằng chương trình của bạn được khởi động và khởi động lại nếu nó bị sập vì bất kỳ lý do gì.

Thiết lập daemontools khá đơn giản. Chỉ

apt-get install daemontools daemontools-run

Sau đó tạo thư mục dịch vụ của bạn chứa tập lệnh chạy thực thi:

# 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

Hãy xem /service/my-service/runvà chỉnh sửa nó, để nó bắt đầu chương trình của riêng bạn thay vì chạy echo. Khi đã xong, symlink thư mục đó vào /etc/serviceđể daemontools tự động (re) khởi động nó:

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

Sau khoảng 5 giây, chương trình của bạn sẽ chạy. Bạn có thể bắt đầu / dừng nó bằng cách sử dụng

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

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

Cũng có thể đăng nhập vào (ví dụ) syslog. Vì vậy, đầu ra của chương trình của bạn không bị mất. Tôi đã viết một bài đăng blog đầy đủ hơn về điều này ở đây: https://info-beamer.com/blog/rasty-info-beamer-in-production


9
  1. Trong Raspian bấm Menu, Preferences, Main Menu Editor
  2. Nhấp vào Tùy chọn và kiểm tra các ứng dụng mặc định cho LXSession
  3. Nhấn OK và đóng trình chỉnh sửa menu chính
  4. Bây giờ bấm vào Menu và Under Preferences bấm vào Ứng dụng mặc định cho LXSession
  5. Cấu hình LXSession mở
  6. Nhấp vào Tự động khởi động
  7. Bên dưới các ứng dụng tự động khởi động dán vào dòng lệnh java của bạn
  8. bấm thêm
  9. đóng ứng dụng cấu hình LXSession và khởi động lại pi của bạn

    ứng dụng java của bạn sẽ chạy sau khi khởi động lại


Tôi nghĩ chỉ cần thêm một chút chi tiết ở đây
Darth Vader

Làm việc tốt cho tôi!
jbyrnes

Cảm ơn @Palmeta! Tôi đã có một chương trình tự khởi động nhưng thực sự đã quên nơi tôi đã đặt nó. Tôi đã nhìn mọi nơi. Với công cụ cấu hình mà bạn mô tả, cuối cùng tôi có thể xác định lại vị trí của nó và hủy kích hoạt nó: D! 100 điểm
Pascal Lamers

2

Bạn có thể đã croncài đặt cho một số nhiệm vụ vệ sinh của PI.

Tìm kiếm man 5 crontabcho @reboot.


0

Bạn có thể muốn nghiên cứu service. Bạn có thể tạo một tập lệnh init là một phần của init của hệ thống và đặt nó vào một runlevel thích hợp.

Chạy đi man service.

Dưới đây là hướng dẫn tạo tập lệnh init: http://www.novell.com/coolsolutions/feature/15380.html


2
Đáng buồn thay, với sự vội vã giống như systemdhầu hết các bản phân phối Linux, bao gồm cả Raspbian, câu trả lời này sẽ cần cập nhật nếu OP cập nhật hệ thống của họ để tiếp quản từ sysV init... 8- (
SlySven

0

Chỉ cần theo liên kết này .

Giả sử bạn có test.txt trên máy tính để bàn, một ví dụ có thể là:

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

Và nó hoạt động!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.