Opensuse - start af script ved boot

jørgen
Antal: 164
Tilmeldt:
23-02-2003
User is offline
Opensuse - start af script ved boot

Jeg skal starte et script når Opensuse er booted og alle services tilgængelige (start af Homeautomation).

Har jeg forstået det rigtigt, at jeg lægger det ind i after.local i /etc.init.d/ ?
- og hvis ja, skal jeg flytte/kopiere after.local til en af rcx.d mapperne?

/jørgen


McDonnell
Antal: 885
Tilmeldt:
25-12-2007
User is offline
Hej Jørgen Jeg går ud fra

Hej Jørgen

Jeg går ud fra det du gerne vil opnå er at køre et script ved start op og luk ned?

Først skal du have lavet et init script som skal gemmes i /etc/init.d/my_maintenance

#!/bin/bash
# Author: your name here
#
# /etc/init.d/my_maintenance
#
### BEGIN INIT INFO
# Provides:          my_maintenance
# Required-Start:    network
# Should-Start:      $null
# Required-Stop:     xdm
# Should-Stop:      $null
# Default-Start:     5
# Default-Stop:      5
# Short-Description: Runs various maintenance scripts.
# Description:       Not actually a service at all.
### END INIT INFO

. /etc/rc.status

rc_reset

case "$1" in
   start)
     # use colour for ease of spotting
      echo -e "\E[36mRunning $0 (start)...\E[0m";
      /etc/init.d/my_maintenance.d/start
      echo -e "\E[36mDone $0 \E[0m";
   ;;
   stop)

      echo -e "\E[36mRunning $0 (stop)...\E[0m";
      /etc/init.d/my_maintenance.d/stop
      echo -e "\E[36mDone $0 \E[0m";
   ;;
   restart)
      $0 stop
      $0 start
      rc_status
      ;;
   *)
      echo "Usage $0 (start|stop|restart)"
      exit 1;
      ;;
esac

rc_exit

Giv filen de nødvendige rettigheder.

$ chmod u+x /etc/init.d/my_maintenance

Den overstående fil sørger for at netværk er startet op før dit script hvis det er nødvendigt.

Her efter skal du lave to mapper.

$ mkdir -p /etc/init.d/my_maintenance.d/start.d
$ mkdir -p /etc/init.d/my_maintenance.d/stop.d

De scripts der skal køres under op start ligges i start.d og under nedlukning stop.d

Nu skal du lave filen /etc/init.d/my_maintenance.d/start script

#!/bin/bash

# run scripts with names starting 0-9 in foreground. if you want to
# put a script in start.d and you care about when it gets run in relation
# to other scripts, give it a name starting 0-9
for i in $(dirname $0)/start.d/[0-9]*;do
   test -x $i && echo -e "\E[36mRunning ${i} \E[0m" && $i
done

# run scripts with names starting a-z in the background
# as this reduces the over all time this script takes to run.
for i in $(dirname $0)/start.d/[a-z]*;do
   test -x $i && echo -e "\E[36mRunning ${i} \E[0m" && $i &
done

# wait for children to exit
wait;

Og filen /etc/init.d/my_maintenance.d/stop

#!/bin/bash

# run scripts with names starting 0-9 in foreground. if you want to
# put a script in start.d and you care about when it gets run in relation
# to other scripts, give it a name starting 0-9
for i in $(dirname $0)/stop.d/[0-9]*;do
   test -x $i && echo -e "\E[36mRunning ${i} \E[0m" && $i
done

# run scripts with names starting a-z in the background
# as this reduces the over all time this script takes to run.
for i in $(dirname $0)/stop.d/[a-z]*;do
   test -x $i && echo -e "\E[36mRunning ${i} \E[0m" && $i &
done

# wait for children to exit
wait;

Giv begge filer de nødvendige rettigheder.

$ chmod u+x /etc/init.d/my_maintenance.d/start
$ chmod u+x /etc/init.d/my_maintenance.d/stop

Til sidst skal init scriptet aktiveres.

$ insserv /etc/init.d/my_maintenance

Sig lige til om det virker, da min post er baseret på en note jeg har fra 2011 :)

Fortsat god dag!


cb400f
cb400f's picture
Antal: 3495
Tilmeldt:
20-02-2005
User is offline
Siden 2011 er openSUSE,

Siden 2011 er openSUSE, ligesom de fleste andre distro, skiftet til systemd. Der er ganske vist noget legacy-kompatibilitet med det gamle sysvinit, men jeg er usikker på hvor godt det virker. Og der er i hvert fald ikke de store fremtidsperspektiver i det.

I stedet burde #0 lære at skrive en systemd unit file, da det er den "korrekte" måde at gøre tingene på nu om stunder. Efter sigende skulle det ikke være så vanskeligt igen, på trods af at det er et Lennart Poettering/Red Hat-design.

Og så kan han fortælle mig hvordan man griber det an, når jeg en dag selv får brug for det ;-)

Hvis scriptet kan køres som almindelig bruger, og det kan vente til skrivebordsmiljøet er startet, vil man i stedet kunne bruge "autostart" funktionalitet fra skrivebordsmiljøet, hvilket er umanerligt nemt.


Kresten Kjaer
Kresten Kjaer's picture
Antal: 342
Tilmeldt:
16-09-1991
User is offline
Systemd er dejlig nem at

Systemd er dejlig nem at arbejde med. Dels fordi abstraktionslaget er på et lidt højere niveau.
I /etc/systemd/system/test.service skriver du:

[Unit]
Description=Write anything here.
After=network.target

[Service]
User=aUser
Group=aGroup
ExecStart=/opt/my_runner.sh
RestartSec=5
Restart=on-failure

[Install]
WantedBy=multi-user.target

Husk at sætte chmod +x på den fil du skriver under ExecStart.

---
Miracle.dk - we dare, share & care.


dudsen
Antal: 963
Tilmeldt:
10-01-2009
User is offline
hvis jeg husker rigtigt

/etc/init.d/boot.local er det sidste der eksekveres efter systemd er færdig hvis ellers jeg husker rigtigt. brugte vist det trick til at løse et problem skabt af systemd's forsøg på at "fixe" netværks opsætningen.

after.local burde også virke.

For normale service bruger man idag unit filer men hvis du bare skal rydde op efter standard boot så er de 3 post boot scripts ofte en bedre løsning.


jørgen
Antal: 164
Tilmeldt:
23-02-2003
User is offline
Tusind tak, Dudsen Jeg var

Tusind tak, Dudsen

Jeg var gået i gang med systemd, men kløjs i fejl på rettigheder. (Jeg havde installeret system_ui så jeg grafisk kunne se hvad pokker der skete efter jeg havde enablet (imit tilfælde "systemctl enable Homeseer.service")

Læste så dit indlæg, og opdagede at jeg tidligere havde skrevet Home i stedet for home i path i min boot local

Nu er jeg en glad mand. Min Gigabyte Brix kan starte efter strømnedbrud, og starter Homeseer (mit homeautomation) automatisk. - Så kan jeg gemme boksen på min sommerlejr i et skab.

/jørgen