題:
在啟動時執行腳本
Tyler Murry
2013-08-01 06:52:19 UTC
view on stackexchange narkive permalink

當我的Raspberry Pi啟動時,我正在嘗試執行腳本。我希望網絡瀏覽器能夠自動打開。 。

我調查了 Upstart,但我一直在努力了解其工作原理。當我測試它們時,我嘗試過的所有腳本都無法正常工作。

您正在運行什麼操作系統?在我正在Pi上使用的FreeBSD中,您可以將啟動腳本添加到/usr/local/etc/rc.d/,或僅將內容添加到/etc/rc.local。不同的Linux發行版具有不同的推薦方法。如果您正在X上運行X,則應該考慮將內容添加到.xinitrc或.xsession文件中。
有關X啟動過程的更多信息,請參見[此處](http://unix.stackexchange.com/questions/47359/what-is-xsession-for)。
**請注意**此處接受的答案有一些警告,並且在技術上*除非在特定條件下,否則*在啟動時不會啟動任何操作。請仔細閱讀。
您要的是一個在登錄時運行的腳本,而不是在pi啟動或啟動時運行的腳本。兩件非常不同的事物,標題使Google搜索結果傾斜。
如果要在啟動時自動啟動** node.js **腳本,請使用pm2。專為此設計的;用於在啟動時運行腳本,在日誌文件中跟踪其stdout和stderr,重新啟動腳本等。
十二 答案:
syb0rg
2013-08-01 07:31:38 UTC
view on stackexchange narkive permalink

此答案已過時-並包含錯誤的方法,即使在編寫時也是如此。

不幸的是,這仍然被標記為

要在啟動時運行Midori,請查看本教程。有關DIY解決方案,請繼續閱讀。


您可以將腳本可執行命令添加到 .bashrc 的底部,該命令將在每次打開終端時運行腳本(或運行 bash 的新實例)

  1. 請確保您位於 pi 文件夾中:

      $ cd〜 
  2. 創建文件並編寫腳本以在文件中運行:

      $ sudo納米上標 
  3. 保存並退出: Ctrl kbd> + X kbd>, Y kbd>,輸入 kbd>

  4. 打開 .bashrc 進行配置:

  5. ol>

    .bashrc 旨在運行腳本。

    每次非登錄時都會運行
    〜/ .bashrc:由bash(1)對非登錄shell執行

      $ sudo nano .bashrc  
    1. 向下滾動到底部並添加l ine: ./ superscript

    2. 保存並退出: Ctrl kbd> + X kbd>, Y kbd>,輸入 kbd>

    3. ol>

      如果您正在尋找在啟動到控制台時可以使用的解決方案,請查看此鏈接。基本清單:

      1. 為啟動腳本創建一個文件,並將腳本寫入該文件:

          $ sudo nano /etc/init.d / superscript  
      2. 保存並退出: Ctrl kbd> + X kbd>, Y kbd> , Enter kbd>

      3. 使腳本可執行:

          $ sudo chmod 755 /etc/init.d/superscript  
      4. 註冊要在啟動時運行的腳本:

          $ sudo update-rc.d上標默認值 
      5. ol>

        如果您希望腳本在啟動時運行進入LXDE環境,您可以查看此Raspberry Pi論壇帖子

        1. 導航到〜/ .config / lxsession / LXDE-pi

        2. 打開該文件夾中的 autostart 文件:

            $ sudo nano autostart  
        3. 在新行上添加 @midori 。如果要運行類似python腳本的內容,請在新行上添加類似 @python mypython.py 的內容。運行腳本文件應該是 @。/ superscript ,但是由於某種原因,腳本會無限循環地運行(也許 this會阻止它運行)。

        4. 保存並退出: Ctrl kbd> + X kbd>, Y kbd>, Enter kbd>

        5. 將Raspberry Pi重新啟動到LXDE環境中。

        6. ol>
我在尋找有關在啟動時設置Midori的教程。不知道為什麼有這麼多方法可以做這種簡單的事情,但是我很高興它現在可以工作了。
@syb0rg如果我通過ssh登錄,則登錄時運行的部分就像超級按鈕(+1)一樣工作,但是當lxde桌面會話啟動時卻無法運行。有沒有辦法做到這一點 ?
@GeorgeProfenza何時執行$ sudo startx`?
使用`raspi-config`的@syb0rg raspian配置為使用圖形界面引導。我不確定如何在後台進行操作(如果執行sudo startx或只是執行startx),因為我看到了圖形界面,但是腳本無法運行。但是,當我SSH到RPi時,腳本會啟動。
@GeorgeProfenza我在一個專門為您準備的全新章節中進行了編輯:)
@syb0rg如此關閉:) LXDE / autostart方法有效,儘管運行@。/ superscript(在我的情況下,我在其中啟動我的./svnc來運行緊實的vncserver)有一個怪異的副作用:該腳本一遍又一遍地運行,並且我不斷地啟動多個vnc服務器淹死系統。作為一種更安全的解決方案,在閱讀了[this post](http://www.raspberrypi.org/phpBB3/viewtopic.php?f=26&t=28967)之後,我已經安裝了avahi,因此現在更容易通過ssh登錄,並且然後啟動vnc服務器。知道使用LXDE / autostart文件方法避免腳本循環會很方便
我已經在鏈接中編輯了@GeorgeProfenza,以在完成後關閉腳本,這可能會有所幫助。
如果您只想在RPi啟動時運行ONE命令,代碼將是什麼?我正在使用中間方法,並且通常要執行以下操作:$ sudo /opt/jdk1.8.0/bin/java -Xms256M -Xmx496M -jar /home/pi/spigot.jar nogui`
@AnnonomusPerson將該命令放入腳本中,然後在啟動時運行該腳本。
只是想指出pyhton腳本會運行,但是如果有任何錯誤,使用/ etc / xdg / lxsession / LXDE / autostart方法,它將只在後台某處。使用.barshrc也會顯示錯誤,但是確保腳本一開始緊緊是非常重要的(很難找出來:))
@GeorgeProfenza這是一個python腳本嗎?
@AnnonomusPerson我打算在LXDE啟動時啟動我的python腳本,是的,但是上面介紹的方法可以啟動bash腳本或RPi上安裝的任何其他應用程序
對於LXDE,請參見http://www.raspberrypi-spy.co.uk/2014/05/how-to-autostart-apps-in-rasbian-lxde-desktop/
在.bashrc中添加腳本後,每當我打開lxterminal`bash:./main:權限被拒絕`時,我都會收到以下消息。
我認為部分原因是過時的-/ etc / xdg路徑應為/ etc / xdg / lxsession / LXDE-pi。編輯以反映這一點。
**。bashrc`不會在系統啟動或用戶登錄時讀取,**僅在打開新終端時才會讀取(每次用戶打開新終端時都會讀取)。我很困惑這個答案有這麼多投票:**第一部分是完全錯誤的**。第三部分正確執行GUI程序。
@Gilles引導時會打開一個新終端...您還將如何與OS交互?
@syb0rg通過GUI。如果未啟用自動登錄,則需要先登錄。
`.bashrc`技巧僅在您打開一個終端窗口時才有效(並且每次您打開另一個終端窗口時)。相反,如果僅等到圖形外殼程序啟動,則什麼也不會發生。
如果我的python腳本需要作為sudo運行怎麼辦?
如何在啟動而不是登錄時驗證root用戶?
avidreader610
2013-12-26 18:06:19 UTC
view on stackexchange narkive permalink

我見過的大多數人(在Raspberry Pi論壇上看過)並成功完成自己的方式是使用 /etc/rc.local

您在這裡所需要做的就是將 ./ myscript 放在rc.local文本文件中。如果是在python中,請將 python myscript.py

從字面上看,這是“一個簡單的解決方案,(例如將我的腳本放置在某些”啟動”目錄或類似的目錄中)”也許在您有疑問時也可以在論壇上進行搜索,此解決方案將出現在Google搜索的前4個結果中!

僅供參考,默認情況下,rc.local具有有關腳本的各種註釋,這些註釋不執行任何操作且需要更改可執行位。這不是正確的,只需在退出0之前輸入腳本的命令,它將在啟動時運行。確保您的腳本在後台退出運行,否則它將阻止登錄提示。是的,那就是我所做的。
參見http://www.raspberry-projects.com/pi/pi-operating-systems/raspbian/auto-running-programs
@rob您是否表示建議將腳本設置為可執行文件?通過使用命令“ python myscript.py”運行腳本可以緩解該問題。如果要chmod + x並添加`#! / bin / python`,則可以通過執行$ pathtofile / myscript.py來運行腳本,如果位於相同目錄中,或者位於文件的絕對或相對路徑中,則$ pathtofile是.。
@JFA運行“ ls -l /etc/rc.local”,該文件將顯示該文件是否可執行,在權限列表中查找“ x”。
@rob是的,我知道它是如何工作的。我正在嘗試澄清您的帖子。
對於諸如瀏覽器之類的GUI程序來說,這沒有好處。 /etc/rc.local僅用於啟動系統服務(不具有用戶界面的程序)。
儘管這在我的Pi 1 B +上完美運行,但由於某些未知原因,它無法在我的Pi 3上運行,運行完全相同的腳本(將在兩個腳本上手動運行)。我不確定為什麼它不能在Pi 3上運行。
已修正(來源:http://elinux.org/RPi_Email_IP_On_Boot_Debian),我在任何腳本代碼之前的“ /etc/rc.local”中的最後註釋之後添加了“ sleep 30”。現在,我的腳本可以正常運行了。
那需要sudo的腳本呢?即。不?
@Gilles我正在尋找一個GUI程序。你有什麼建議嗎? (我想開始科迪)
@ErickM.Sprengel在此線程上使用正確的答案之一,例如[this](https://raspberrypi.stackexchange.com/a/44926)。
簡單地執行`python myscript.py`對我不起作用。不得不做:`bash -c'/ usr / bin / python3 /home/pi/myscript.py> /home/pi/myscript.log 2>&1'&`
Aaron
2016-03-29 01:21:32 UTC
view on stackexchange narkive permalink

將其添加到crontab中

crontab在定義的時間運行命令。


編輯文件:

  sudo crontab -e  

在文件中添加一行(此處為python腳本):

  @reboot python3 /home/pi/Desktop/exemple.py & 代碼> 
對此,請注意,從技術上講,不是crontab運行命令,而是無論如何。對於要添加的列出行,建議為此處定義的命令放置完整路徑(在本例中為“ python3”的完整路徑),請參見[here](http://stackoverflow.com/questions/2388087) /如何獲得Cron調用正確的路徑)
由於其簡單性,這是我一直使用的方法。 +1
對於諸如瀏覽器之類的GUI程序來說,這是不好的。 /etc/rc.local僅用於啟動沒有用戶界面的程序。
在花了很多時間嘗試使它與rc.local和init.d以及其他各種東西一起使用後,這立即起作用了!謝謝分配!
這在rpi os中由於某種原因不起作用
似乎工作正常,但僅在某些Raspberry Pi上有效。這是一致的。它確實起作用的總是起作用的;那些不起作用的,永遠不會起作用。
AFAIK cron @reboot僅適用於(猜測什麼?)重新啟動。我的意思是,例如從關閉狀態打開時,它不起作用。這就是我傾向於避免使用此選項的原因。
信息存儲在哪裡?它似乎在`/ tmp`中。那不可能是(?)。
ccpizza
2017-10-28 19:47:32 UTC
view on stackexchange narkive permalink

自動啟動xorg應用

如果您要啟動的腳本需要xorg會話,則可以嘗試遵循 freedesktop自動啟動規範,該規範可能會或可能不會生效,具體取決於哪個桌面

或者,您可以按 https://wiki.archlinux.org/index.php/autostarting中的描述定位特定的桌面環境。

>

將腳本作為systemd服務運行

如果您的腳本符合守護程序或“服務”的描述,並且系統正在運行 systemd對於raspbian和大多數現代linuce,則可以將腳本配置為作為系統服務運行-這提供了對生命週期和執行環境的精細控制,以及(重新)啟動腳本的前提條件,例如網絡正常運行和啟動。運行。如果出現故障( Restart = always ,以及重新啟動之間的延遲,例如 RestartSec = 10 ),也可以配置服務重新啟動。

對於全系統使用在 / etc / systemd / system 下創建您的systemd單元文件,例如與 vim /etc/systemd/system/autossh.service

  [Unit] Description = Autossh keepalive守護程序##確保我們僅在網絡啟動後才啟動服務。Wants= network-online.targetAfter = network.target [Service] ##如果服務背景本身本身,請使用'Type = forking'##其他值是Type = simple(默認)和Type = oneshotType = forking ##在這裡我們可以設置自定義環境變量Environment = AUTOSSH_GATETIME = 0Environment = AUTOSSH_PORT = 0ExecStart = / usr / local / bin / ssh-keep-alive.shExecStop = / usr / bin / killall -9 autossh ###注意:您可以有多個`ExecStop`行ExecStop = / usr / bin / killall ssh#如果您的腳本需要訪問用戶文件,請不要使用'nobody'#(如果未設置User,則該服務將以root用戶身份運行)#User =沒有人#在調試期間很有用;服務運行後將其刪除StandardOutput = console [Install]
WantedBy = multi-user.target  

另請參見:

現在我們已經準備好測試服務了:

  systemctl start autossh  

檢查服務狀態:

  systemctl status autossh  

停止服務:

  systemctl停止autossh  

一旦您確認該服務可以正常工作,請使用以下命令啟用該服務:

  systemctl enable autossh  

注意:為了安全起見, systemd 將在受限環境中運行腳本,類似於 crontab 腳本已運行,因此不要對現有的系統變量做任何假設。如果您的腳本需要定義特定的變量,請使用 Environment 鍵。在bash腳本的頂部添加 set -x ,然後運行 systemctl status my_service 可能有助於確定腳本失敗的原因。通常,始終對所有內容使用絕對路徑,包括 echo cat ,或明確定義$ PATH。 sup>

ThN
2016-03-29 23:54:55 UTC
view on stackexchange narkive permalink

儘管這是一個老問題,但我通常想做一些簡單的事情-自動啟動,我想投入兩分錢。我針對該問題在所有答案中嘗試了所有建議的解決方案。他們都沒有為我工作。我正在將Raspberry PI Model 2與Raspbian一起使用。

我要使我的應用程序成功自動啟動的唯一方法是通過腳本,如下所示。我之所以說成功,是因為我的應用程序按預期方式啟動,而沒有諸如以錯誤的工作路徑開頭之類的任何問題。

1。創建一個擴展名為.sh的空文件,並將其命名為任意名稱。 > 2。完全複製並粘貼以下內容,只是將“您的應用程序名稱”更改為剛創建的腳本名稱。

 #! / bin / sh ### BEGIN INIT INFO#提供:noip#必需開始:$ remote_fs $ syslog#必需停止:$ remote_fs $ syslog#缺省開始:2 3 4 5#缺省停止:0 1 6#簡短描述:用於在啟動時啟動程序的簡單腳本### END INIT INFO#將/ direct / path / to / your / application更改為應用程序所在的路徑。cd / direct / path / to / your / application#示例cd / home / pi / myprogram /#將YourProgramExactName更改為要自動啟動的程序的確切名稱。/YourProgramExactNameexit 0  
  1. 然後,將腳本文件保存在應用程序文件夾中

  2. 然後,打開 /home/pi/.config/autostart 文件夾。您的情況可能有所不同。只需打開您的主文件夾並啟用查看隱藏的文件夾。打開 .config / autostart 。如果看不到自動啟動文件夾,請在.config文件夾中創建一個名為自動啟動的文件夾。

  3. 在自動啟動文件夾中,您需要為腳本文件創建一個快捷方式,創建如下。創建一個擴展名為 .desktop 的空文件。

  4. 將以下內容複製並粘貼到空的桌面文件中,除非您需要更改註釋名稱 Exec 路徑 Icon 字段的值。

      [桌麵條目] Comment = Exec = / path / to / Your / application / Name-of-腳本文件(.sh)Icon = / Path / to / Your / application / Icon / IconNameName = YourApplicationEXACTNAMEPath = / Path / to / Your / Application-ONLYType = Application  
  5. 在更改所有必要字段後保存並關閉文件。大功告成只需測試一下即可。

  6. ol>
從技術上講,此腳本是由系統而不是特定用戶運行的-因此,您的__application__最好屬於`/ usr / local / bin / ApplicationName` ...?
@SlySven“系統”是特定用戶。
它是以root(UID = 0)還是以pi用戶(UID〜500或1000 IIRC)運行-如果它是以root或另一個*系統* UID(小於500)運行,則*傳統上*的好習慣是存儲腳本文件(或腳本文件所依賴的文件)位於根設備上,因此任何其他設備(例如“ home”,如果是單獨的設備)都應該有問題,腳本(或當系統故障恢復到單個用戶`/ bin / sh` shell時,文件將不可用!如今,“ systemd”方法是在啟動PID 1之前同時掛載“ /”和“ / usr”。
lamarant
2016-04-01 21:03:17 UTC
view on stackexchange narkive permalink

我對此也有麻煩。在運行Raspbian的Raspberry Pi3上,這就是我所做的:

  1. 在您的根目錄中創建啟動shell腳本(我將其命名為“ launch”):
  2. ol>

    sudo leafpad launch.sh

    1. 保存文件
    2. 編輯LXDE-pi自動啟動文件
    3. sudo leafpad /home/pi/.config/lxsession/LXDE-pi/autostart

      1. 將此添加到底部該文件的
      2. ol>

        ./ launch.sh

        1. 重啟
        2. ol>
不要這樣做,如果長時間運行該命令可能會中斷啟動
這就是發生的情況:https://www.raspberrypi.org/forums/viewtopic.php?p=1491815&sid=66adc27e87dc959d104af2a9270a4f4a#p1491815這是您如何解決的方法:https://raspberrypi.stackexchange.com/a/70527/121533
Amr Sohil
2018-02-25 05:25:55 UTC
view on stackexchange narkive permalink

新方法-RASPBERRY PI OS。

這也適用於其他版本。

創建桌面文件

  xyz.desktop  

在其中鍵入以下內容

  [桌麵條目] Encoding = UTF-8Type = ApplicationName = <應用程序名稱轉到此處>Comment = Exec = python / home / pi / Desktop / execute_on_boot.pyStartupNotify = falseTerminal = trueHidden = false  

將此文件粘貼到

  /home/pi/.config/autostart /  

並重新啟動樹莓派,它會自動在新終端中運行程序。

舊方法-RASBIAN STRETCHOn運行Raspbian的Raspberry Pi3拉伸這就是我所做的:

編輯LXDE-pi自動啟動文件

  sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart

將此添加到該文件的底部

  @sudo python3 /path/to/your/script.py 

保存&重新啟動

不要這樣做,如果該命令長時間運行,則該命令可能會中斷引導-您需要通過引導至命令行來手動修復它:(
實際上,Raspberry Pi OS不支持此方法,它將使用更新的信息來編輯我的答案。
User98764431
2017-10-14 21:03:14 UTC
view on stackexchange narkive permalink

方法1:

要在登錄時自動啟動命令,請將命令放入名為

  .bashrc  

在用戶目錄(例如/ home / pi)中

旨在運行腳本。

每次啟動非登錄交互shell時都會運行它,並用於配置shell。
〜/ .bashrc:對於非登錄shell,由bash(1)執行

例如,文件可能包含

  chromium-browser --kiosk www.google.com  

以全屏方式啟動Chromium,指向www.google.com


方法2:

此解決方案非常有效。一旦瀏覽器加載完畢,屏幕左上方就會出現一個黑色小方塊,這似乎是一個常規錯誤(其他人在論壇上提到了該錯誤),但是全屏模式會隱藏瀏覽器頁面以外的所有內容。

編輯自動啟動文件:

  sudo nano / etc / xdg / lxsession / LXDE / autostart  

在開始時使用“#”註釋所有內容每行,然後添加以下行

自動運行瀏覽器

  @xset s off @ xset -dpms @ xset s noblank @ midori -e全屏-a http ://google.com  

如有必要,請使用配置工具在加電時啟用GUI自動運行

  sudo raspi-config  

如果需要返回到命令提示符,請按 CTRL kbd> + ALT kbd> + F1 kbd>

CTRL kbd> + ALT kbd> + F2 kbd>

Deepesh
2016-09-06 19:21:32 UTC
view on stackexchange narkive permalink

使用命令“ python /path/to/your/script.py”創建.sh文件,鍵入“ sudo nano /etc/rc.local”,然後鍵入.sh文件的路徑

 退出0  

之前,或者您只需輸入

  crontab -e  如果您希望腳本在啟動時運行,請在文件內

  sudo crontab -e  

輸入

  @reboot python /path/to/your/script.py &  
強烈建議對crontab條目使用“完整路徑”!
HelpNeeder
2016-11-27 08:06:55 UTC
view on stackexchange narkive permalink

您可以將腳本放置在 / etc / profile 文件的底部。

其他選項對我不起作用,但這可能是因為我將腳本放置在了桌面。

YumYumYum
2018-04-10 21:32:41 UTC
view on stackexchange narkive permalink

工作。(在每次重新引導時,它都會自動準備以下提交)

  $ cat /etc/rc.local#!/bin/sh -eecho“ 18” > / sys / class / gpio / exportecho“出” > / sys / class / gpio / gpio / gpio18 / directionecho“ 1” > / sys / class / gpio / gpio18 / valueexit 0  
>
Doe.John
2018-04-15 02:02:10 UTC
view on stackexchange narkive permalink

這通常是我要做的事情。

  1. 將文件存儲在raspberry pi主目錄中。例如:mycode.py
  2. 編輯文件:

    sudo nano .bashrc

  3. ol>

    .bashrc NOT ,旨在運行腳本。

    每次啟動非登錄交互式shell並運行
    〜/ .bashrc:由bash(1)對非登錄shell執行

    1. 轉到文件末尾並寫:

      sudo python mycode.py

    2. 如果要將輸出存儲在txt文件中,請按如下所示在步驟3中編輯代碼:

      sudo python mycode.py >> output.py

    3. ol>

      希望這會有所幫助!



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...