Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten  (gelezen 747 keer)

Offline Pjotr

  • Lid
    • Makkelijke Linuxtips
  • Steunpunt: Nee
Het is niet erg eenvoudig om een root-opdracht automatisch te laten uitvoeren bij het opstarten (met sudo-rechten) in Linux Mint en Ubuntu. Helaas heeft systemd dit veel lastiger gemaakt.

Vandaar deze handleiding, waarmee het een stuk makkelijker wordt om dit te bewerkstelligen:
https://makkelijkelinuxtips.blogspot.com/p/root-opdracht-opstarten.html

Doe er je voordeel mee!   :)

Offline vanadium

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #1 Gepost op: 2020/07/22, 15:51:18 »
Waarom niet bij /etc/rc.local blijven? Het wordt tot nader order nog steeds ondersteund via een bestaande systemd.service. Staat, althans in Ubuntu, standaard aan.

Wel leerrijk natuurlijk om te zien hoe je je eigen systemd service maakt  :)

Offline Pjotr

  • Lid
    • Makkelijke Linuxtips
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #2 Gepost op: 2020/07/22, 16:33:39 »
Waarom niet bij /etc/rc.local blijven? Het wordt tot nader order nog steeds ondersteund via een bestaande systemd.service. Staat, althans in Ubuntu, standaard aan.

Wel leerrijk natuurlijk om te zien hoe je je eigen systemd service maakt  :)

Terechte vraag, maar hoe lang blijft systemd het verouderde afgeschafte rc.local nog ondersteunen? "Mijn" oplossing is toekomstbestendig, want die maakt gebruik van de officiële moderne functies van systemd.  :)

Offline Pjotr

  • Lid
    • Makkelijke Linuxtips
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #3 Gepost op: 2020/07/22, 18:05:51 »
Zie ook:
man systemd-rc-local-generator
... en dan met name:
Citaat
Support for both /etc/rc.local and /usr/sbin/halt.local is provided for compatibility with specific System V systems only. However, it is strongly recommended to avoid making use of these scripts today, and instead provide  proper unit files with appropriate dependencies for any scripts to run during the boot or shutdown processes.
« Laatst bewerkt op: 2020/07/22, 18:12:42 door Pjotr »

Offline vanadium

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #4 Gepost op: 2020/07/23, 09:19:17 »
Waarom niet bij /etc/rc.local blijven? Het wordt tot nader order nog steeds ondersteund via een bestaande systemd.service. Staat, althans in Ubuntu, standaard aan.

Wel leerrijk natuurlijk om te zien hoe je je eigen systemd service maakt  :)

Terechte vraag, maar hoe lang blijft systemd het verouderde afgeschafte rc.local nog ondersteunen? "Mijn" oplossing is toekomstbestendig, want die maakt gebruik van de officiële moderne functies van systemd.  :)

Toch zeker nog de komende vijf jaar in Ubuntu. Wat jij doet, scheelt niet van de rc.local aanpak die standaard is ingebouwd: je maakt een service aan die een extern script runt. Allen noemt dat script "kapitein.sh" in plaats van "rc.local".

De tip is zeker waardevol, maar ik vind dit nu voorbarig en onnodig complicerend. Beetje te veel zijn tijd vooruit  =D

Offline nahjo

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #5 Gepost op: 2020/07/24, 11:18:09 »
Het is een goede tip en zeker ook nog bruikbaar in de toekomst  :)

Is een @reboot regel in /etc/crontab ook niet een mogelijkheid ?
« Laatst bewerkt op: 2020/07/24, 11:40:21 door nahjo »

Offline vanadium

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #6 Gepost op: 2020/07/24, 18:14:46 »
Goed is ie zeker de tip.

Is je /etc/rc.local niet meer wenst te gebruiken, dan geldt dat ook voor crontab. Ook daar heeft systemd overgenomen.

Nu lijkt me het gebruik van een cronjob @reboot equivalent aan het gebruik van rc.local. Ik heb er alvast een opdracht staan, en ik zie nu dat op mijn systeem geen /etc/rc.local aanwezig is.

Offline h2o

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #7 Gepost op: 2020/07/24, 20:20:42 »
Ik heb een constructie waarbij ik zelf een /etc/rc.local heb aangemaakt en die via een systemd service heb geactiveerd. Makkelijk om dan dergelijke root opstarttaken in onder te brengen.
Ik zal het binnenkort wel documenteren, komt redelijk overeen met de werkwijze die Pjotr heeft beschreven maar wijkt ook een beetje af.
Laptops , tablets + werkstations: Debian Buster
Test-laptop: Debian Testing/Unstable

Offline h2o

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #8 Gepost op: 2020/07/25, 14:05:19 »
Zoals beloofd:

sudo touch /etc/rc.local
sudo chmod +x /etc/rc.local

voeg later toe aan /etc/rc.local:
sudo nano /etc/rc.local   #!/bin/sh
   Je eventuele commando('s)
Opslaan met [CTRL] + [ o ]
Afsluiten met [CTRL] + [ x ]

Je eigen tekst editor kan natuurlijk ook, mits het root bevoegdheden heeft.
#!/bin/sh moet er minimaal in staan.

Plak dit in de terminal:

Citaat
echo [Unit]  > /etc/systemd/system/rc-local.service
echo  Description=/etc/rc.local Compatibility >> /etc/systemd/system/rc-local.service
echo  ConditionPathExists=/etc/rc.local >> /etc/systemd/system/rc-local.service
echo   >> /etc/systemd/system/rc-local.service
echo [Service] >> /etc/systemd/system/rc-local.service
echo  Type=forking >> /etc/systemd/system/rc-local.service
echo  ExecStart=/etc/rc.local start >> /etc/systemd/system/rc-local.service
echo  TimeoutSec=0 >> /etc/systemd/system/rc-local.service
echo  StandardOutput=tty >> /etc/systemd/system/rc-local.service
echo  RemainAfterExit=yes >> /etc/systemd/system/rc-local.service
echo  SysVStartPriority=99 >> /etc/systemd/system/rc-local.service
echo  >> /etc/systemd/system/rc-local.service
echo [Install] >> /etc/systemd/system/rc-local.service
echo  WantedBy=multi-user.target >> /etc/systemd/system/rc-local.service

sudo systemctl enable rc-local
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service

De betekenis hiervan: Je maakt eerst een leeg bestandje rc.local en maakt het uitvoerbaar!!!
Daarna wordt de rc-local.service aangemaakt in /etc/systemd/service
Daarna wordt het geactiveerd.

In het bestandje /etc/rc.local zet je bovenin !#/bin/sh om het als een bash script te laten werken.
Verder kun je daarna de commando's naar eigen behoefte opnemen. Zo heb ik zelf iwconfig wlan0 power off toegevoegd.
« Laatst bewerkt op: 2020/07/27, 07:23:24 door h2o »
Laptops , tablets + werkstations: Debian Buster
Test-laptop: Debian Testing/Unstable

Offline vanadium

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #9 Gepost op: 2020/07/25, 14:46:03 »
Die service is bij mij standaard aanwezig, maar dat is wellicht omdat het een opgewaardeerd systeem is en geen schone installatie (foei, Vanadium  :evil:).

Het ziet er als volgt uit:
# /lib/systemd/system/rc-local.service
#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

# /usr/lib/systemd/system/rc-local.service.d/debian.conf
[Unit]
# not specified by LSB, but has been behaving that way in Debian under SysV
# init and upstart
After=network-online.target

# Often contains status messages which users expect to see on the console
# during boot
[Service]
StandardOutput=journal+console
StandardError=journal+console

Voorbeeldje dus van hoe bij een opwaardering "oude" bestanden die niet meer bij pakketten behoren, blijven staan.

Offline nahjo

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #10 Gepost op: 2020/07/25, 15:06:30 »
Maar waarom dan vasthouden aan /etc/rc.local als het kan met een willekeurig uitvoerbaar bestand?  Oude vastgeroeste gewoonte? :)
Zoals al eerder is aangegeven is /etc/rc.local niet standaard meer sinds Ubuntu 18.04 maar /etc/crontab is nog altijd aanwezig. ;)



Offline vanadium

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #11 Gepost op: 2020/07/25, 16:29:31 »
Ik hou er alvast niet aan vast. Ik heb geen rc.local, en heb wel één opdracht lopen via cron. Ook cron is echter "op zich" passé, hoewel Ubuntu het nog installeert.

Daarbij moet ik, voortschrijdend inzicht indachtig, mijn stelling dat de tip van Pjotr wat te vroeg komt, intrekken. rc.local service blijkt inderdaad helemaal weg uit Ubuntu en wellicht Mint. Ik dacht van niet omdat ik die zelf nog staan heb, maar dat blijkt een overblijfsel van vroeger.

Offline Bloom

  • Lid
  • Steunpunt: Ja
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #12 Gepost op: 2020/07/25, 17:02:31 »
Debian heeft standaard ook geen /etc/rc.local meer, maar je kunt dat dus onder systemd met weinig problemen voor elkaar krijgen.
Het grote voordeel van rc.local is dat iedereen het kent en weet waar het staat. Door dat overboord te gooien, krijg je systemen waar je eerst moet gaan zoeken of er zo'n opstartscript gebruikt is en zo ja, hoe dat heet en waar het staat. Leuk hoor.

Offline nahjo

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #13 Gepost op: 2020/07/25, 17:43:51 »
Misschien dat Pjotr zijn tip kan aanpassen naar /etc/rc.local vanwege backwards compatibility  =D

Offline vanadium

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #14 Gepost op: 2020/07/25, 18:40:54 »
Ik pleit dan meteen voor "/autoexec.bat"  =D


Offline h2o

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #16 Gepost op: 2020/07/27, 07:15:32 »
Debian heeft standaard ook geen /etc/rc.local meer, maar je kunt dat dus onder systemd met weinig problemen voor elkaar krijgen.
Het grote voordeel van rc.local is dat iedereen het kent en weet waar het staat. Door dat overboord te gooien, krijg je systemen waar je eerst moet gaan zoeken of er zo'n opstartscript gebruikt is en zo ja, hoe dat heet en waar het staat. Leuk hoor.
Die oplossing die ik heb gepost doet dat dus. Die maakt een nieuw rc.local script aan wat via een rc-local.service draait. Daarna in dat rc.local bestandje zetten wat nodig is en gaan met die banaan.
Laptops , tablets + werkstations: Debian Buster
Test-laptop: Debian Testing/Unstable

Offline Pjotr

  • Lid
    • Makkelijke Linuxtips
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #17 Gepost op: 2020/07/27, 10:17:57 »
Debian heeft standaard ook geen /etc/rc.local meer, maar je kunt dat dus onder systemd met weinig problemen voor elkaar krijgen.
Het grote voordeel van rc.local is dat iedereen het kent en weet waar het staat. Door dat overboord te gooien, krijg je systemen waar je eerst moet gaan zoeken of er zo'n opstartscript gebruikt is en zo ja, hoe dat heet en waar het staat. Leuk hoor.
Die oplossing die ik heb gepost doet dat dus. Die maakt een nieuw rc.local script aan wat via een rc-local.service draait. Daarna in dat rc.local bestandje zetten wat nodig is en gaan met die banaan.

Tja, als de hoeveelheid moeite die je moet doen voor ouderwetse /etc/rc.local bijna net zo groot is als voor de officieel aangeraden moderne oplossing, waarom zou je dan nog bij het oude blijven hangen? Daarbij komt: op een gegeven ogenblik zal de ondersteuning voor rc.local sowieso ophouden, dus je moet er toch een keer aan geloven.  ;)

Merk op dat de moderne oplossing extra opties biedt die rc.local niet heeft: zo kun je heel precies in de service instellen op welk moment in het opstartproces een bepaalde opdracht moet worden uitgevoerd. Namelijk met de schakeloptie After=

Voor verschillende opdrachten kun je dus verschillende schakelopties toepassen.
« Laatst bewerkt op: 2020/07/27, 12:08:31 door Pjotr »

Offline vanadium

  • Lid
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #18 Gepost op: 2020/07/27, 12:51:19 »
Tja, als de hoeveelheid moeite die je moet doen voor ouderwetse /etc/rc.local bijna net zo groot is als voor de officieel aangeraden moderne oplossing, waarom zou je dan nog bij het oude blijven hangen? Daarbij komt: op een gegeven ogenblik zal de ondersteuning voor rc.local sowieso ophouden, dus je moet er toch een keer aan geloven.  ;)

Merk op dat de moderne oplossing extra opties biedt die rc.local niet heeft: zo kun je heel precies in de service instellen op welk moment in het opstartproces een bepaalde opdracht moet worden uitgevoerd. Namelijk met de schakeloptie After=

Voor verschillende opdrachten kun je dus verschillende schakelopties toepassen.
De moeite is niet bijna even groot, ze is even groot. Want essentieel is de methode om toch nog rc.local te gebruiken, dezelfde als die jij voorstelt.

Als het aangewezen is opdrachten op een specifiek moment vroeger of later tijdens het opstartproces in te stellen, dan mag je inderdaad niet meer alles samen steken in een scriptje rc.local of kapitein.sh. Dan maak je voor elk van die opdrachten een afzonderlijke service aan. Ik verwacht echter dat de meeste van dergelijke extra opdrachten gewenst zijn als het systeem helemaal is opgestart. Dan kunnen ze gerust in één scriptje. En ik zie dat jij toch nog "sleep" gebruikt. Dus dat "heel precies" instellen is niet zo belangrijk hier.

Voor mij zou de moeite kleiner zijn: ik heb immers de rc.local.service nog standaard aan boord, en moet die dus niet zelf aanmaken. Maar ik begrijp dat die er in schone installaties van recente Ubuntu en Mint versies er uit zijn.
« Laatst bewerkt op: 2020/07/27, 13:03:01 door vanadium »

Offline Pjotr

  • Lid
    • Makkelijke Linuxtips
  • Steunpunt: Nee
Re: Tip: root-opdracht automatisch laten uitvoeren bij het opstarten
« Reactie #19 Gepost op: 2020/07/27, 14:58:06 »
En ik zie dat jij toch nog "sleep" gebruikt. Dus dat "heel precies" instellen is niet zo belangrijk hier.

Ja klopt, maar dat doe ik meer voor alle zekerheid....