freebsd run script at shutdown / reboot

Fórumok

Sziasztok,

Mostmár muszáj segítséget kérnem mert már mindent elolvastam de akkor sem találom a megoldást.
Akarok egy scriptet futtatni reboot/shutdown-kor de az istennek sem fut le a stop ága. A gép remote van, konzolját nem látom.
reboot és shutdown -r now parancsokkal indítgattam újra de nem végzi el a melót.
start-ra működik, bootoláskor létrehozza a file-t, pedig start-ra nem is akarom hogy a végleges csináljon bármit is, csak stop-ra.
Már a hajam tépem, van valakinek ötlete? Handbook, porters handbook, documentation megvolt de vagy vak vagyok vagy nemtudom... :(
Előre is köszi mindenkinek.

Így néz ki jelenleg a tesztverzió:
#!/bin/sh

# PROVIDE: zfs_custom
# REQUIRE: LOGIN
# KEYWORD: shutdown

. /etc/rc.subr

name="zfs_custom"
rcvar="zfs_custom_enable"
start_cmd="zfs_custom_start"
stop_cmd="zfs_custom_stop"

zfs_custom_start()
{
touch /tmp/start.txt
}

zfs_custom_stop()
{
touch /tmp/stop.txt
}

load_rc_config $name
run_rc_command "$1"

----- update: -----

sehogy nem sikerült dűlőre jutnom, de az egyik hozzászólásnak köszönhetően alaposabban átnéztem az rc.shutdown scriptet aminek a végén ez szerepelt:
# Insert other shutdown procedures here
szóval ide beraktam a scriptemet és működik a dolog.
sajnos rebootkor nem, de shutdown -r használatakor lefut, úgyhogy mostmár csak magamat kell fegyelmeznem hogy reboot parancsot ne használjak :) a szünetmentes pedig úgyis shutdown-t ad ki.
köszönöm mindenkinek.

ui: az 1 nap alatt több mint 1300 megtekintésen kicsit azért meglepődtem :)

Hozzászólások

Az megvan, hogy a gep start up eseten torli a /tmp -t?

Vagyis ha stopkor irsz oda valamit, akkor on boot up torlodni fog. A custom_start meg csak az utan fut le, hogy a /tmp mar tiszta.

Ez a törlés alapból nincs engedélyezve, kell egy rc.conf-beli clear_tmp="YES" hozzá.
Tipp:
- /etc/rc.shutdown sript használata
- nem lehet, hogy már umountolt /tmp-be írsz. (Igaz, /root-ban azért működnie kéne.)

Nem hibás az a törlés/létrehozás? Izé a stop része. Bár nem annak néz ki.

Most átírtam hogy minden ilyen tmp kérdés megoldódjon, a /1/ könytárba írom a file-t amin chmod 777 van, de a helyzet változatlan.
Nem hibás a stop rész mert ha kézzel futtatom stop-al akkor lefut, elvégzi a dolgát.

rc.shutdown scriptet megnézem, köszönöm, eddig nem akartam beleírni, bíztam benne hogy ennél van "official"-abb megoldás.

rcorder /etc/rc.d/*

igaz ez elso korben indulasra fejti ki, hogy milyen sorrendben indulnak el a dolgok, bele kellene nezni a scriptbe / kodba, es at kellene irni stopra is
___
info

sima zfs csak ennyit tartalmaz:


#!/bin/sh
#
# $FreeBSD$
#

# PROVIDE: zfs
# REQUIRE: mountcritlocal

. /etc/rc.subr

name="zfs"
rcvar="zfs_enable"
start_cmd="zfs_start"
stop_cmd="zfs_stop"
required_modules="zfs"

...

valoszinleg a LOGIN nem sul el leallitaskor, te meg arra dependelsz
___
info

Ertem, hogy van kerulo megoldas, de azert probaljuk meg megtalalni a bajt:
- pontosan milyen oprendszer es verzio?
- hova raktad a scriptedet?
- milyen neven van pontosan?
- van futtatasi joga?
- "fgrep -e local_rc -e local_startup /etc/defaults/rc.conf /etc/rc.conf" kimenetet iderakod?
- jail-ben vagy-e?
- "rcorder -k shutdown /etc/rc.d/*" kimeneteben benne van a scripted?
- ha jailben vagy, akkor "rcorder -k shutdown -s nojail /etc/rc.d/*" kimeneteben latszik a tied?
- (ha van local_startup, akkor fenti rcorderes parancsok vegere odateszed a /x/y/z/* parametert - ertelemszeruen /x/y/z helyere a local_startup-ban szereplo konyvtarak mindegyiket behelyettesitve)
- nincs a local_startup konyvtarakban esetleg egyeb altalad keszitett script *.sh neven? (Lehet,hogyy inkabb azzal van a baj, es nem a mostanival?)

ez segithet benne:

reszlet az /etc/rc.subr filebol:


#
# debug message
#       If debugging is enabled in rc.conf output message to stderr.
#       BEWARE that you don't call any subroutine that itself calls this
#       function.
#
debug()
{
        case ${rc_debug} in
        [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
                if [ -x /usr/bin/logger ]; then
                        logger "$0: DEBUG: $*"
                fi
                echo 1>&2 "$0: DEBUG: $*"
                ;;
        esac
}

___
info