Vraag Hoe voer ik een script uit bij het opstarten? [duplicaat]


Deze vraag heeft hier al een antwoord:

Ik heb een script in een map:

/path/to/my/script.sh

Ik heb dit script nodig om te worden uitgevoerd elke keer dat het systeem start (zelfs als niemand zich aanmeldt bij het systeem). Wat moet ik doen om dit te laten gebeuren?


93
2017-12-12 14:40


oorsprong




antwoorden:


U hebt root-rechten nodig voor de volgende zaken. Om root te krijgen, open een terminal en voer de opdracht uit

sudo -i

en de opdrachtprompt verandert in '#' om aan te geven dat de terminalsessie rootprivileges heeft.

Alternatieve # 1: commando's toevoegen aan /etc/rc.local

vi /etc/rc.local

met inhoud zoals de volgende:

# This script is executed at the end of each multiuser runlevel
/path/to/my/script.sh || exit 1   # Added by me
exit 0

Alternatieve # 2: een Upstart-taak toevoegen (voor systemen ouder dan 15.04)

Maak /etc/init/myjob.conf aan

vi /etc/init/myjob.conf

met inhoud zoals de volgende

description     "my job"
start on startup
task
exec /path/to/my/script.sh

Alternatief # 3: Voeg een init-script toe (verouderd)

Maak een nieuw script in /etc/init.d/myscript.

vi /etc/init.d/myscript

(Uiteraard hoeft dit geen "myscript" te worden genoemd.) Doe in dit script wat je wilt doen. Misschien voer je gewoon het script uit dat je hebt genoemd.

#!/bin/sh
/path/to/my/script.sh

Maak het uitvoerbaar.

chmod ugo+x /etc/init.d/myscript

Configureer het init-systeem om dit script bij het opstarten uit te voeren.

update-rc.d myscript defaults

121
2017-12-12 15:07



Moeten mensen de parvenu niet gebruiken? - eduardocereto
Het is mogelijk om hetzelfde te doen door een korte Upstart-taak te schrijven. Initscripts worden echter nog steeds ondersteund en zijn gemakkelijk te gebruiken. - jdthood
Zojuist de Upstart-jobmethode toegevoegd als een derde alternatief. - jdthood
inittab is een andere methode (maar misschien meer voor daemons dan scripts). - Geremia
Ubuntu 16.04 gebruikt nu systemd. Vanaf askubuntu.com/questions/765120/... men kan gebruiken sudo systemctl enable rc-local.service om /etc/rc.local compatibiliteit te krijgen of te zien unix.stackexchange.com/questions/47695/... voor systemd native script (maar /etc/rc.local heeft het voordeel van veel eenvoud). Voeg misschien hier "Alternatief # 4. Voeg een gesystematiseerde job toe" toe? - djb


Je hebt geen root nodig, of zelfs maar inloggen.

U kunt uw crontab bewerken (crontab -e) en maak een bericht als dit aan:

@reboot /path/to/script.sh

Op deze manier kunt u het uitvoeren als een gewone gebruiker. @reboot betekent gewoon dat het wordt uitgevoerd wanneer de computer opstart (niet noodzakelijkerwijs alleen wanneer het opnieuw wordt opgestart).


45
2017-12-12 16:20



Moet de specifieke gebruiker inloggen om crone-taken te laten werken? De vraag staat zelfs als de gebruiker niet inlogt. Zou in dat geval deze methode nog steeds werken? - Dina
@Qwertylicious, nee de gebruiker hoeft zich niet aan te melden om cron-taken uit te voeren. Deze methode werkt ongeacht of hij is ingelogd, omdat cron een systeemproces uitvoert en bij het uitvoeren van de cron-taken van de gebruiker, voert het de taak uit als die gebruiker. Zolang de computer is ingeschakeld, wordt cron uitgevoerd, ongeacht wie is aangemeld. - Dan Jones


van terminal

  1. maak een bestand aan newshell.sh.desktop in ~/.config/autostart map:

    gedit ~/.config/autostart/newshell.sh.desktop
    
  2. verandering Exec, Name en Comment waarde en voeg toe aan bestand: Eerste lijn

     [Desktop Entry]
     Type=Application
     Exec=/full/link/to/your/newshell.sh
     Name=newshell
     Comment=whatever you want
    
  3. opslaan

of

je kunt het vanuit GUI doen:

  1. voer het hulpprogramma "startup applications" uit in Ubuntu 14.04, u schrijft het gewoon in het zoekvak.
  2. voeg hetzelfde toe Exec, Name en Comment.

11
2017-09-16 14:31



Ik weet dat dit een beetje laat is, maar bedankt voor de hulp.
Houd er rekening mee dat het OP expliciet wilde dat het bij het opstarten van het systeem startte voordat iemand inlogde. Gesstartte scripts worden alleen bij aanmelding uitgevoerd. - Gunnar Hjalmarsson


In je huis heb je een bestand met de naam .bashrc. Dit bestand wordt uitgevoerd bij de opening van uw sessie.

Zet zoiets aan het einde van het bestand:

sh /path/to/your/script.sh

EDIT: sorry, ik heb je vraag niet beantwoord, omdat mijn oplossing wordt uitgevoerd wanneer een gebruiker is ingelogd ...

Om iets uit te voeren voordat je inlogt, kun je rcconf of rc-file proberen: http://www.debianadmin.com/manage-linux-init-or-startup-scripts.html


2
2017-12-12 14:47



.bashrc wordt aangeroepen wanneer een nieuwe terminal wordt geopend. - termnml
Bedankt voor de info. De website die je noemde heeft goede info! - Rusty


Bewerk gewoon rc.local nano /etc/init.d/rc.local als volgt:

/path/to/my/script.sh || exit 1 
exit 0

-1
2017-08-25 22:43