Fråga:
Kör skript vid start
Tyler Murry
2013-08-01 06:52:19 UTC
view on stackexchange narkive permalink

Jag försöker köra ett skript när min Raspberry Pi startar upp. Jag skulle vilja att webbläsaren öppnas automatiskt.

Jag har försökt hitta en enkel lösning (som att släppa mitt skript i någon "start" -katalog eller något liknande) men jag ser inget sådant .

Jag har tittat på Upstart, men jag kämpar för att förstå hur det fungerar. Alla skript jag har provat har inte fungerat när jag testar dem.

Vilket operativsystem kör du? I FreeBSD, som jag använder på min Pi, kan du lägga till startskript till /usr/local/etc/rc.d/, eller bara lägga till saker i /etc/rc.local. Olika Linux-distributioner har olika rekommenderade metoder. Om du kör X på det, bör du kanske titta på att lägga till saker i din '.xinitrc' eller '.xsession' fil.
Mer information om X-startprocessen finns [här] (http://unix.stackexchange.com/questions/47359/what-is-xsession-for).
** Observera ** det accepterade svaret här har vissa försiktighetsåtgärder och tekniskt * startar inte något vid start utom under specifika förhållanden. Läs det noggrant.
Du ber om ett skript som körs när du loggar in, inte när pi startar eller vid start. Två _my_ olika saker, och titeln vrider på Googles sökresultat.
Om du vill starta ett ** node.js ** -skript automatiskt vid start, använd pm2. den är utformad speciellt för det; för att köra skript vid start, spåra deras stdout och stderr i loggfiler, starta om skript etc.
Tolv svar:
syb0rg
2013-08-01 07:31:38 UTC
view on stackexchange narkive permalink

Detta svar är föråldrat - och innehåller metoder som var FEL även när det skrevs.

Tyvärr blir detta fortfarande flaggat som ett förslag från StackOverflow.

För att köra Midori vid start, ta en titt på den här självstudien. För DIY-lösningar, läs vidare.


Du kan lägga till ditt skript körbart kommando längst ner i .bashrc som kör ditt skript varje gång du öppnar en terminal (eller kör en ny instans av bash)

  1. Se till att du befinner dig i mappen pi :

      $ cd ~  
  2. Skapa en fil och skriv ett skript som ska köras i filen:

      $ sudo nano superscript  
  3. Spara och avsluta: Ctrl + X , Y , Enter

  4. Öppna .bashrc för konfiguration:

.bashrc är INTE avsedd att köra skript.

Den körs varje gång en icke-inloggning interaktivt skal startas och används för att konfigurera skalet.
~ / .bashrc: körs av bash (1) för icke-inloggningsskal .

  $ sudo nano .bashrc  
  1. Bläddra ner till botten och lägg till l ine: ./superscript

  2. Spara och avsluta: Ctrl + X , Y , Enter


Om du letar efter en lösning som fungerar vid start till konsolen , ta en titt på den här länken. Grundläggande genomgång:

  1. Skapa en fil för ditt startskript och skriv ditt skript i filen:

      $ sudo nano /etc/init.d / superscript  
  2. Spara och avsluta: Ctrl + X , Y , Enter

  3. Gör skriptet körbart:

      $ sudo chmod 755 /etc/init.d/superscript 
  4. Registrera skript som ska köras vid start:

      $ sudo update-rc.d standardinställningar för superscript  

Om du vill att ett skript ska köras när du startar in i LXDE-miljön kan du ta en titt på detta Raspberry Pi-foruminlägg:

  1. Navigera till ~ / .config / lxsession / LXDE-pi

  2. Öppna autostart -filen i den mappen:

      $ sudo nano autostart  
  3. Lägg till @midori på en ny rad. Om du vill köra något som ett python-skript, sätt något som @python mypython.py på en ny rad. Att köra en skriptfil skulle vara @. / Superscript , men av någon anledning körs skriptet i en oändlig slinga (kanske detta kommer att stoppa det).

  4. Spara och avsluta: Ctrl + X , Y , Enter

  5. Starta om din Raspberry Pi i LXDE-miljön.

Handledningen om att ställa in Midori vid start var precis vad jag letade efter. Inte säker på varför det finns så många sätt att göra en så enkel sak, men jag är glad att det fungerar nu.
@syb0rg Körningen vid inloggningsdelen fungerar som en charm (+1) om jag loggar in via ssh, men inte när lxde-skrivbordssessionen startar. finns det ett sätt att göra det?
@GeorgeProfenza När du gör `$ sudo startx`?
@syb0rg Använda "raspi-config" raspian är konfigurerad för att starta med det grafiska gränssnittet. Jag är inte säker på hur det görs bakom kulisserna (om sudo startx körs eller helt enkelt startx) eftersom jag ser det grafiska gränssnittet, men manuset körs inte. Men när jag ssh in i RPi startar manuset.
@GeorgeProfenza Jag redigerade i ett helt nytt avsnitt dedikerat bara för dig :)
@syb0rg Så nära :) LXDE / autostart-metoden fungerar, även om att köra @. / Superscript (i mitt fall ./svnc där jag startar tightvncserver) har en konstig bieffekt: skriptet körs om och om igen och jag får flera vnc-server lanseras kontinuerligt drunknar systemet. Som en säkrare lösning, efter att ha läst [detta inlägg] (http://www.raspberrypi.org/phpBB3/viewtopic.php?f=26&t=28967) har jag installerat avahi så nu är det lättare att logga in via ssh, och starta vnc-servern sedan. Det skulle vara praktiskt att veta att undvika skript lanuch loop med LXDE / autostart filmetoden
@GeorgeProfenza Jag har redigerat i en länk för att stänga av ett skript när det är klart, kanske det hjälper.
Vad skulle koden vara om du bara vill köra ett kommando när RPi startar? Jag använder mittmetoden och för att göra det normalt skulle jag skriva: `$ sudo /opt/jdk1.8.0/bin/java -Xms256M -Xmx496M -jar /home/pi/spigot.jar nogui`
@AnnonomusPerson Lägg kommandot i ett skript och kör sedan skriptet vid start.
Ville bara påpeka att pyhton-skriptet kommer att köras, men om det finns några fel kommer det bara att finnas någonstans i bakgrunden med / etc / xdg / lxsession / LXDE / autostart-metoden. att använda .barshrc kommer också att avslöja fel, men det är verkligen viktigt att se till att skriptet är tätt i första hand (upptäckte det på det hårda sättet :))
@GeorgeProfenza Så det är ett python-skript?
@AnnonomusPerson Jag tänkte starta mitt python-skript vid start av LXDE, ja, men metoderna som presenteras ovan fungerar för att starta ett bash-skript eller någon annan app installerad på RPi
För LXDE se http://www.raspberrypi-spy.co.uk/2014/05/how-to-autostart-apps-in-rasbian-lxde-desktop/
Jag får följande meddelande, efter att ha lagt till skript i .bashrc, när jag någonsin öppnar min lxterminal `bash: ./main: Tillstånd nekad`
En del av detta är att jag tror är föråldrad - sökvägen `/ etc / xdg` ska vara` / etc / xdg / lxsession / LXDE-pi`; redigerad för att återspegla detta.
** `.bashrc` läses inte när systemet startar eller när en användare loggar in **, bara när man öppnar en ny terminal (och den läses varje gång användaren öppnar en ny terminal). Jag är förvirrad över att det här svaret fick så många röster: ** den första delen är helt fel **. Den tredje delen är korrekt för att köra ett GUI-program.
@Gilles En ny terminal öppnas vid start ... hur skulle du annars interagera med operativsystemet?
@syb0rg Genom ett GUI. Och du måste logga in först om autologin inte är aktiverad.
tricket `.bashrc` fungerar bara om du öppnar ett terminalfönster (och varje gång du öppnar ett annat terminalfönster). Däremot, om du bara väntar tills det grafiska skalet startar, händer ingenting.
Vad händer om mitt python-skript måste köras som sudo?
Hur kan jag verifiera rotanvändaren vid start, inte logga in?
avidreader610
2013-12-26 18:06:19 UTC
view on stackexchange narkive permalink

Det sätt som jag har sett de flesta människor gör (titta på Raspberry Pi-forumen) och har gjort mig själv med framgång är att använda /etc/rc.local .

Allt du behöver göra här är att lägga ./myscript i rc.local-textfilen. Om det är i python, sätt python myscript.py .

Detta är bokstavligen "en enkel lösning, (som att släppa mitt skript i någon" start "-katalog eller något liknande)" - kanske söker i forumen när du har frågor också, den här lösningen kom upp på de första 4 resultaten av en google-sökning!

FYI rc.local har som standard olika kommentarer om att manuset inte gör någonting och behöver körbara bitar ändras. Detta stämmer inte, skriv bara kommandot för ditt skript innan avfart 0 och det körs vid start. Se till att ditt skript avslutas med körningar i bakgrunden, annars blockerar det inloggningsprompten. Ja, det är vad jag gjorde.
Se http://www.raspberry-projects.com/pi/pi-operating-systems/raspbian/auto-running-programs
@rob Menar du att de föreslår att manuset ska ställas in som körbart? Detta mildras i frågan genom att köra skriptet med kommandot `python myscript.py`. Om du vill chmod + x det och lägga till `#! / bin / python `, du kan köra skriptet genom att göra` $ pathtofile / myscript.py` där `$ pathtofile` är `.` om du är i samma katalog eller den absoluta eller relativa sökvägen till filen.
@JFA kör "ls -l /etc/rc.local" som visar om filen är körbar eller inte, leta efter "x" i listan över behörigheter.
@rob ja jag förstår hur det fungerar. Jag försökte klargöra ditt inlägg.
Det är inte bra för ett GUI-program som en webbläsare. `/ etc / rc.local` är bara att starta systemtjänster (program som inte har ett användargränssnitt).
Även om detta fungerar perfekt på min Pi 1 B +, kommer det inte att fungera på min Pi 3 av okänd anledning och kör exakt samma skript (som körs manuellt på båda). Jag är inte säker på varför det inte fungerar på Pi 3.
Fixad (källa: http://elinux.org/RPi_Email_IP_On_Boot_Debian) Jag lade till `sleep 30` efter den senaste kommentaren i` / etc / rc.local`, före någon av manuskoden, och nu går mitt skript bra.
Vad sägs om manus som behöver sudo? dvs. noip?
@Gilles Jag letar exakt efter ett GUI-program. Har du ett förslag? (Jag skulle vilja starta Kodi)
@ErickM.Sprengel Använd ett av de rätta svaren på den här tråden, till exempel [den här] (https://raspberrypi.stackexchange.com/a/44926).
att helt enkelt göra `python myscript.py` fungerade inte för mig. Måste göra: `` 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

Lägg till det i crontab

Crontab kör kommandon vid definierade tider.


Redigera filen:

  sudo crontab -e  

Lägg till rad i filen (här ett pythonscript):

  @reboot python3 /home/pi/Desktop/exemple.py &  kod> 
För att vara lite nickande här, tekniskt är det inte crontab som kör kommandot, utan hur som helst. När det gäller den listade raden som ska läggas till är det lämpligt att lägga hela sökvägar för de kommandon som definieras här (i det här fallet hela sökvägen till `python3`), se [här] (http://stackoverflow.com/questions/2388087 / hur-att-få-cron-att-ringa-i-de-rätt-sökvägar)
Det här är den metod som jag alltid har använt på grund av dess enkelhet. +1
Det är inte bra för ett GUI-program som en webbläsare. `/ etc / rc.local` är endast för att starta program som inte har ett användargränssnitt.
Efter att ha spenderat mycket tid på att försöka få det att fungera med rc.local och init.d och alla möjliga andra saker .. det här fungerade direkt! Tack så mycket!
detta fungerar inte av någon anledning i rpi os
Verkar som om det fungerar bra, men bara på några av mina hallon Pis. Det är dock konsekvent. De som fungerar fungerar alltid; de som inte fungerar, fungerar inte alltid.
AFAIK cron @reboot fungerar bara för, gissa vad ?, startar om. Jag menar att det inte fungerar när du slår på från till exempel från. Detta är anledningen till att jag tenderar att undvika detta alternativ.
Var lagras informationen? Det verkar vara i `/ tmp`. Det kan inte vara(?).
ccpizza
2017-10-28 19:47:32 UTC
view on stackexchange narkive permalink

Autostarting av xorg-appar

Om skriptet du vill starta kräver en xorg-session kan du försöka följa freesktop autostart spec som kanske eller kanske inte fungerar beroende på vilket skrivbord miljö som du använder.

Alternativt kan du rikta in dig på din specifika skrivbordsmiljö enligt beskrivningen på https://wiki.archlinux.org/index.php/autostarting.

Köra ett skript som en systemd-tjänst

Om ditt skript passar beskrivningen av en demon eller en "tjänst" och ditt system kör systemd vilket är fallet för raspbian och mest moderna linjer, då kan du konfigurera ditt skript så att det körs som en systemd-tjänst - detta ger detaljerad kontroll över livscykel- och exekveringsmiljön, samt förutsättningar för att (åter) starta skriptet, såsom att nätverket är uppe och löpning. Det är också möjligt att konfigurera omstart av tjänsten i händelse av fel ( Starta om = alltid , och fördröjning mellan omstart t.ex. RestartSec=10).

För systemomfattande användning skapa din systemd-enhetsfil under / etc / systemd / system , t.ex. med vim /etc/systemd/system/autossh.service:

  [Enhet] Beskrivning = Autossh keepalive daemon ## se till att vi bara startar tjänsten efter att nätverket är upWants = nätverk-online.targetAfter = network.target [Service] ## använd 'Type = forking' om själva tjänstebakgrunderna ## andra värden är Type = enkel (standard) och Type = oneshotType = forking ## här kan vi ställa in anpassade miljövariabler Miljö = AUTOSSH_GATETIME = 0Miljö = AUTOSSH_PORT = 0ExecStart = / usr / local / bin / ssh-keep-alive. : du kan ha flera `ExecStop`-raderExecStop = / usr / bin / killall ssh # använd inte 'none' om ditt skript behöver komma åt användarfiler # (om användaren inte är inställd kommer tjänsten att köras som root) # User = ingen # Användbar under felsökning; ta bort den när tjänsten fungerarStandardOutput = konsol [Installera]
WantedBy = multi-user.target  

Se även:

Nu vi är redo att testa tjänsten:

  systemctl start autossh  

Kontroll av tjänstens status:

  systemctl status autossh  

Avbryter tjänsten:

  systemctl stop autossh  

När du har verifierat att tjänsten fungerar som förväntat aktivera den med:

  systemctl aktivera autossh  

OBS: Av säkerhetsskäl systemd kör skriptet i en begränsad miljö, liknande den som crontab -skript körs, gör därför inga antaganden om befintliga systemvariabler. Använd tangenterna Miljö om ditt skript behöver specifika variabler definieras. Att lägga till set -x högst upp i ditt bash-skript och sedan köra systemctl status my_service kan hjälpa dig att identifiera varför ditt skript misslyckas. Som en tummen regel ska du alltid använda absoluta sökvägar för allt inklusive eko och katt eller definiera uttryckligen din $ PATH.

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

Jag vill kasta in mina två cent, även om det här är en gammal fråga men ofta ombedd att göra enkla saker - autostart. Jag försökte alla föreslagna lösningar i alla svaren för den här frågan. INGEN av dem arbetade för mig. Jag använder Raspberry PI Model 2 med Raspbian.

Det enda sättet jag kunde få min ansökan att starta framgångsrikt är genom ett skript enligt följande. Jag säger framgångsrikt eftersom min ansökan började som förväntat utan att ha några problem som att börja med fel arbetsväg.

1.Skapa en tom fil med tillägget .sh och namnge vad du vill.

2.Kopiera och klistra in följande EXAKT förutom att ändra "ditt applikationsnamn" till skriptnamnet som du just skapade.

  #! / bin / sh ### BEGIN INIT INFO # Ger: noip # Obligatorisk start: $ remote_fs $ syslog # Obligatorisk-stopp: $ remote_fs $ syslog # Standard-start: 2 3 4 5 # Standard-stopp: 0 1 6 # Kort beskrivning: Enkelt skript för att starta ett program vid start ### SLUT INIT INFO # ändra / direkt / sökväg / till / din / applikation till den sökväg din applikation är i. Cd / direkt / sökväg / till / din / applikation # exempel cd / home / pi / myprogram / #change YourProgramExactName to Exact name of your program that you want to auto start ./YourProgramExactName exit 0  
  1. Spara sedan skriptfilen i din applikationsmapp

  2. Öppna sedan mappen /home/pi/.config/autostart . Det kan vara annorlunda i ditt fall. Öppna bara din hemmapp och aktivera visa dolda mappar. öppna .konfig / autostart . Om du inte ser autostartmapp skapar du en mapp som heter autostart i .config-mappen.

  3. i autostartmappen måste du skapa en genväg till din skriptfil som du skapas enligt följande. Skapa en tom fil med tillägget .desktop.

  4. Kopiera och klistra in följande i den tomma skrivbordsfilen förutom att du måste ändra Kommentar , Namn , Kör , Path and Icon field's value.

      [Desktop Entry] Kommentar = Exec = / path / to / Your / application / Name-of- skriptfilen (.sh) Icon = / Path / to / Your / application / Icon / IconNameName = YourApplicationEXACTNAMEPath = / Path / to / Your / Application-ONLYType = Application  
  5. Spara och stäng filen efter att alla nödvändiga fält har ändrats. Du är färdig. Testa bara det.

Tekniskt körs detta skript av systemet snarare än av en specifik användare - så kanske din __applikation__ bättre hör hemma i `/ usr / local / bin / ApplicationName` ...?
@SlySven "systemet" är en specifik användare.
Körs det som root (UID = 0) eller pi-användare (UID ~ 500 eller 1000 IIRC) - om det körs som root eller ett annat * system * UID (mindre än 500) är det * traditionellt * god praxis att lagra skriptfilen (eller något som den beror på) på rotenheten så att det skulle vara problem med någon annan enhet (t.ex. "hem" om det är en separat enhet) kommer det inte att vara något problem med skriptet (eller ett körbar) -fil är inte tillgänglig när systemet misslyckas tillbaka till ett enskilt användars / bin / sh-skal! Numera är `systemd` sättet att montera både` / `och` / usr` innan PID 1 startas ...
lamarant
2016-04-01 21:03:17 UTC
view on stackexchange narkive permalink

Jag hade också problem med detta. På Raspberry Pi3 som kör Raspbian är det här jag gjorde:

  1. Skapa ett startskalskript i din rotkatalog (jag heter min "start"):

sudo leafpad launch.sh

  1. Spara filen
  2. Redigera LXDE-pi autostartfil
  3. sudo leafpad /home/pi/.config/lxsession/LXDE-pi/autostart

    1. Lägg till detta längst ner av den filen

    ./launch.sh

    1. starta om
Gör inte detta, kommandot kan starta om det är långvarigt
Så här händer: https://www.raspberrypi.org/forums/viewtopic.php?p=1491815&sid=66adc27e87dc959d104af2a9270a4f4a#p1491815 Så här fixar du det: https://raspberrypi.stackexchange.com/a/70527/121533
Amr Sohil
2018-02-25 05:25:55 UTC
view on stackexchange narkive permalink

NY METOD - RASPBERRY PI OS.

Detta borde också fungera på andra versioner.

Skapa en skrivbordsfil

  xyz.desktop  

skriv in följande i det

  [Desktop Entry] Encoding = UTF-8Type = ApplicationName = <Application Name Goes here>Comment = Exec = python / home / pi / Desktop / execute_on_boot.pyStartupNotify = falseTerminal = trueHidden = false  

klistra in den här filen i

  /home/pi/.config/autostart/ 

och starta om din hallon-pi och det ska automatiskt köra ditt program i en ny terminal.

GAMMAL METOD - RASBIAN STRETCH På Raspberry Pi3 som kör Raspbian Stretch så gjorde jag det:

Redigera autostartfilen för LXDE-pi

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

Lägg till detta längst ner i filen

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

spara & omstart

Gör inte detta, kommandot kan starta om det är långt - du måste fixa det manuellt genom att starta in på kommandoraden :(
Egentligen stöds denna metod inte i Raspberry Pi OS, kommer att redigera mitt svar med uppdaterad info.
User98764431
2017-10-14 21:03:14 UTC
view on stackexchange narkive permalink

Metod 1:

För att starta ett kommando automatiskt vid inloggning, placera kommandot i en fil med namnet

  .bashrc  

i användarkatalogen (till exempel / home / pi)

.bashrc är INTE avsedd att köra skript.

Det körs varje gång ett interaktivt skal utan inloggning startas och används för att konfigurera skalet.
~ / .bashrc: körs av bash (1) för skal utan inloggning .

Exempelvis kan filen innehålla

  chrom-browser --kiosk www.google.com  

för att starta Chromium på helskärm pekade på www.google.com


Metod 2:

Denna lösning fungerar riktigt bra. När webbläsaren laddats finns det en liten svart fyrkant längst upp till vänster på skärmen som verkar vara ett allmänt fel (det nämns på forum av andra) men annars döljer helskärmsläget allt utom webbläsarsidan.

Redigera autostartfilen:

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

Kommentera allt med ett '#' i början på varje rad och lägg sedan till följande rader

Kör webbläsaren automatiskt

  @xset s av @ xset -dpms @ xset s noblank @ midori -e Helskärm -a http : //google.com  

Använd vid behov konfigurationsverktyget för att möjliggöra automatisk körning av GUI vid uppstart

  sudo raspi-config  

Om du behöver gå tillbaka till kommandotolken CTRL + ALT + F1

CTRL + ALT + F2

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

skapa en .sh-fil med kommandona 'python /path/to/your/script.py'type' sudo nano /etc/rc.local 'och skriv sökvägen till .sh-filen

före

  avsluta 0  

Eller du kan bara skriva in

  crontab -e  

eller

  sudo crontab -e 

om du vill att skriptet ska köras vid start

inuti filen skriv in

  @reboot python /path/to/your/script.py &  
Användningen av ** hela vägar ** rekommenderas starkt för crontab-poster!
HelpNeeder
2016-11-27 08:06:55 UTC
view on stackexchange narkive permalink

Du kan placera ditt skript längst ner i filen / etc / profile .

Andra alternativ fungerade inte för mig, men det beror kanske på att jag lade mitt skript på skrivbordet.

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

it FUNGERAR. (Vid varje omstart startar du följande inlämningar automatiskt)

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

Det här är vad jag brukar göra.

  1. Lagra din fil i raspberry pi-hemkatalogen. Exempel: mycode.py
  2. Redigera filen:

    sudo nano .bashrc

.bashrc är INTE avsedd att köra skript.

Det körs varje gång ett interaktivt skal som inte är inloggat startas och startas används för att konfigurera skalet.
~ / .bashrc: körs av bash (1) för icke-inloggningsskal .

  1. Gå till slutet av filen och skriv:

    sudo python mycode.py

  2. Om du vill att utdata ska lagras i en txt-fil, redigera koden i steg 3 enligt följande:

    sudo python mycode.py >> output.py

Hoppas det hjälper!



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...