簡體   English   中英

如何在啟動樹莓派上運行 shell 腳本?

[英]how to run a shell script on startup raspberry pi?

您好,我需要幫助來弄清楚如何在啟動時運行 shell 腳本。 我知道 magicmirror.sh 腳本有效,而且我知道它走在正確的道路上。 當我重新啟動我的樹莓派時,它不會運行腳本。 我已使用sudo crontab -e將代碼行添加到 crontab 的末尾。 代碼如下。

@reboot sleep 60 && /home/pi/magicmirror.sh

我認為這是權限的問題。 嘗試使用不帶 sudo 的 crontab -e。

問題可能是您在腳本中調用命令的方式。 由於 crontab 從非常小的 shell 運行,因此並非所有環境變量都被加載。 因此,可能$PATH變量丟失/未完全加載,因此找不到您從腳本內部調用的某些二進制文件。

我猜你的腳本以#!/bin/bash開頭。 如果我的猜測是正確的,請嘗試使用#!/bin/env /bin/bash啟動腳本(這意味着“使用完整環境啟動 bash”)或將腳本中的所有調用/命令替換為完整路徑。 例如/usr/local/bin/myprog dosomething而不是myprog dosomething

編輯:正如@shv 提到的,這也可能是權限問題。 但也許以不同的方式。 如果您運行sudo crontab -e您正在編輯root的 crontab,而不是您的pi用戶。 這有兩個效果:

  1. 你的腳本是在root環境下運行的。 有時,某些配置使您能夠以不同於 root 用戶的方式做事。 我絕不是 Raspberry pi 專家,但可能是您的魔鏡訪問了一些 GPIO 引腳。 我可以想象,盡管對 GPIO 有更多權限,但root必須以不同於 pi 用戶的方式與 GPIO 交互。 (胡亂猜測)
  2. 這實際上是一個安全風險。 您的 pi 用戶可以隨意編輯magicmirror.sh並在其中寫入任何內容。 因此,例如,有權訪問該 pi 用戶的人(因為他“入侵”了系統,或者只是您授予訪問權限的人)可以編寫例如rm -rf --no-preserve-root /並重新啟動設備, 清理文件系統。 你不想那樣做,是嗎? 要解決此問題,您可以使用crontab -e (不帶 sudo)編輯您自己的 crontab,或者將該腳本放在只有 root 可以訪問的地方(如果您需要 root 權限),例如/root/magicmirror.sh

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM