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
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
Kommentarer5
Hej Jørgen
Jeg går ud fra
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!
Siden 2011 er openSUSE,
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.
Systemd er dejlig nem at
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.
hvis jeg husker rigtigt
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.
Tusind tak, Dudsen
Jeg var
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