Dienst will nicht starten ... rc ignore me!

affefreebsd

Well-Known Member
Hi Leute,
ich habe in /usr/local/etc/rc.d ein Skript angelegt namens "shairp" weches ich mit "/usr/local/etc/rc.d/shairp start" ausführen kann und alles Super ist. Nur will es nicht beim Booten starten. Was mache ich falsch?

shairp:
#!/bin/sh . /etc/rc.subr name="shairp" start_cmd="/usr/local/bin/shairport-sync &" stop_cmd=":" load_rc_config $name : ${shairp_enable="yes"} : ${shairp_msg="Nothing started."} shair_start() { echo "Nothing started." } rcvar=shairp_enable run_rc_command "$1"


und in der /etc/rc.conf
ifconfig_re0="DHCP" sshd_enable="YES" ntpd_enable="YES" # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="AUTO" dbus_enable="YES" avahi_daemon_enable="YES" shairp_enable="YES"


Mir fehlt wohl eine Stunde Schlaf :-)
Gruss
*ape
 
Ist es ausführbar? Also hat es permissions? chmod 755 /usr/local/etc/rc.d/shairp

Oh, dann würde das aber manuell so wohl nicht funktionieren. Dass es beim Boot nicht klappt könnte darauf hinweisen, dass du Dependencies festlegen musst, weil du zum Beispiel das Netzwerk brauchst.

Das wird hier erklärt:


Des Weiteren willst du statt dem command & eher daemon(8) verwenden.
 
Um zu prüfen, ob dein Skript überhaupt von rc ausgeführt wird und wann, kannst du rcorder nutzen:

# rcorder /etc/rc.d/* /usr/local/etc/rc.d/*

Außerdem fehlt wohl das Schlüsselwort PROVIDE, ob das zwingend ist, weiß ich aber nicht.

Rob
 
Ich würde vermuten, dass du die "rcvar" Zuweisung vor die Zeile mit "load_rc_config" schreiben musst.
Sonst beachtet load_rc_config das "shair_enable" in der rc.conf nicht.
 
Ist es ausführbar? Also hat es permissions? chmod 755 /usr/local/etc/rc.d/shairp

Oh, dann würde das aber manuell so wohl nicht funktionieren. Dass es beim Boot nicht klappt könnte darauf hinweisen, dass du Dependencies festlegen musst, weil du zum Beispiel das Netzwerk brauchst.

Das wird hier erklärt:


Des Weiteren willst du statt dem command & eher daemon(8) verwenden.
Start Skript Funktioniert. Manuel kann ich den Sienst starten und den Artikel "rc-scripting" habe ich gelesen... :-) Und mit Daemon haste natürlich recht. & ist imma QuickAndDirty
 
Wie sind die Ausgaben von:
Code:
service -e
service -r
?

Code:
service -e
/usr/local/etc/rc.d/shairp
/etc/rc.d/hostid
/etc/rc.d/hostid_save
/etc/rc.d/cleanvar
/etc/rc.d/kldxref
/etc/rc.d/ip6addrctl
/etc/rc.d/rctl
/etc/rc.d/mixer
/etc/rc.d/devmatch
/etc/rc.d/netif
/etc/rc.d/devd
/etc/rc.d/resolv
/etc/rc.d/newsyslog
/etc/rc.d/cleartmp
/etc/rc.d/dmesg
/etc/rc.d/gptboot
/etc/rc.d/os-release
/etc/rc.d/motd
/etc/rc.d/virecover
/etc/rc.d/syslogd
/etc/rc.d/savecore
/etc/rc.d/ntpd
/usr/local/etc/rc.d/dbus
/usr/local/etc/rc.d/avahi-daemon
/etc/rc.d/cron
/etc/rc.d/sendmail
/etc/rc.d/sshd
/etc/rc.d/bgfsck
service -r
/etc/rc.d/sysctl
/etc/rc.d/dumpon
/usr/local/etc/rc.d/shairp
/etc/rc.d/ddb
/etc/rc.d/hostid
/etc/rc.d/ccd
/etc/rc.d/gbde
/etc/rc.d/geli
/etc/rc.d/zpool
/etc/rc.d/swap
/etc/rc.d/zfskeys
/etc/rc.d/fsck
/etc/rc.d/zvol
/etc/rc.d/growfs
/etc/rc.d/root
/etc/rc.d/hostid_save
/etc/rc.d/mdconfig
/etc/rc.d/sppp
/etc/rc.d/serial
/etc/rc.d/mountcritlocal
/etc/rc.d/tmp
/etc/rc.d/zfsbe
/etc/rc.d/zfs
/etc/rc.d/var
/etc/rc.d/cfumass
/etc/rc.d/cleanvar
/etc/rc.d/FILESYSTEMS
/etc/rc.d/ipsec
/etc/rc.d/ldconfig
/etc/rc.d/kldxref
/etc/rc.d/adjkerntz
/etc/rc.d/hostname
/etc/rc.d/ip6addrctl
/etc/rc.d/ippool
/etc/rc.d/netoptions
/etc/rc.d/opensm
/etc/rc.d/random
/etc/rc.d/iovctl
/etc/rc.d/ugidfw
/etc/rc.d/rctl
/etc/rc.d/mixer
/etc/rc.d/geli2
/etc/rc.d/autounmountd
/etc/rc.d/kld
/usr/local/etc/rc.d/uuidd
/etc/rc.d/ipfilter
/etc/rc.d/ipmon
/etc/rc.d/devmatch
/etc/rc.d/addswap
/etc/rc.d/ipnat
/etc/rc.d/ipfs
/etc/rc.d/netif
/etc/rc.d/devd
/etc/rc.d/stf
/etc/rc.d/ppp
/etc/rc.d/pfsync
/etc/rc.d/pflog
/etc/rc.d/rtsold
/etc/rc.d/static_ndp
/etc/rc.d/static_arp
/etc/rc.d/resolv
/etc/rc.d/defaultroute
/etc/rc.d/zfsd
/etc/rc.d/ipfw
/etc/rc.d/routing
/etc/rc.d/bridge
/etc/rc.d/route6d
/etc/rc.d/pf
/etc/rc.d/routed
/etc/rc.d/ipfw_netflow
/etc/rc.d/netwait
/etc/rc.d/blacklistd
/etc/rc.d/local_unbound
/etc/rc.d/NETWORKING
/etc/rc.d/kdc
/etc/rc.d/iscsid
/etc/rc.d/ctld
/etc/rc.d/nfsuserd
/etc/rc.d/kfd
/usr/local/etc/rc.d/sndiod
/etc/rc.d/pppoed
/etc/rc.d/kpasswdd
/etc/rc.d/nfscbd
/etc/rc.d/gssd
/etc/rc.d/iscsictl
/etc/rc.d/ipropd_master
/etc/rc.d/ipropd_slave
/etc/rc.d/kadmind
/etc/rc.d/mountcritremote
/etc/rc.d/newsyslog
/etc/rc.d/cleartmp
/etc/rc.d/mdconfig2
/etc/rc.d/dmesg
/etc/rc.d/devfs
/etc/rc.d/gptboot
/etc/rc.d/hostapd
/etc/rc.d/os-release
/etc/rc.d/motd
/etc/rc.d/virecover
/etc/rc.d/accounting
/etc/rc.d/archdep
/etc/rc.d/sysvipc
/etc/rc.d/syslogd
/etc/rc.d/linux
/etc/rc.d/localpkg
/etc/rc.d/ntpdate
/etc/rc.d/savecore
/etc/rc.d/hastd
/etc/rc.d/bsnmpd
/etc/rc.d/auditd
/etc/rc.d/watchdogd
/etc/rc.d/pwcheck
/etc/rc.d/auditdistd
/etc/rc.d/rpcbind
/etc/rc.d/SERVERS
/etc/rc.d/nisdomain
/etc/rc.d/nfsclient
/etc/rc.d/ypserv
/etc/rc.d/ypbind
/etc/rc.d/ypldap
/etc/rc.d/ypxfrd
/etc/rc.d/ypupdated
/etc/rc.d/ypset
/etc/rc.d/automountd
/etc/rc.d/yppasswdd
/etc/rc.d/keyserv
/etc/rc.d/quota
/etc/rc.d/mountd
/etc/rc.d/automount
/etc/rc.d/nfsd
/etc/rc.d/statd
/etc/rc.d/lockd
/etc/rc.d/DAEMON
/etc/rc.d/rarpd
/etc/rc.d/sdpd
/etc/rc.d/rtadvd
/etc/rc.d/rwho
/etc/rc.d/powerd
/etc/rc.d/bootparams
/etc/rc.d/hcsecd
/etc/rc.d/local
/etc/rc.d/lpd
/etc/rc.d/ubthidhci
/etc/rc.d/mountlate
/etc/rc.d/nscd
/etc/rc.d/ntpd
/etc/rc.d/utx
/etc/rc.d/apm
/etc/rc.d/moused
/usr/local/etc/rc.d/dbus
/usr/local/etc/rc.d/git_daemon
/etc/rc.d/ftp-proxy
/usr/local/etc/rc.d/avahi-daemon
/etc/rc.d/bthidd
/etc/rc.d/apmd
/etc/rc.d/rfcomm_pppd_server
/etc/rc.d/swaplate
/usr/local/etc/rc.d/avahi-dnsconfd
/etc/rc.d/LOGIN
/etc/rc.d/ftpd
/etc/rc.d/othermta
/etc/rc.d/cron
/etc/rc.d/sendmail
/etc/rc.d/sshd
/etc/rc.d/inetd
/etc/rc.d/syscons
/etc/rc.d/sysctl_lastload
/etc/rc.d/msgs
/etc/rc.d/bgfsck
/etc/rc.d/jail
/etc/rc.d/securelevel
Code:
 
Um zu prüfen, ob dein Skript überhaupt von rc ausgeführt wird und wann, kannst du rcorder nutzen:

# rcorder /etc/rc.d/* /usr/local/etc/rc.d/*

Außerdem fehlt wohl das Schlüsselwort PROVIDE, ob das zwingend ist, weiß ich aber nicht.

Rob

Jetzt habe ich Provide und Require drin. Require habe ich auf AVAHI gesetzt. Dann kann ich davon ausgehen das das Netzwerk iO ist.
Aber was soll ich bei "Provide" angeben??? rcoder meckert schon

Code:
rcorder /etc/rc.d/* /usr/local/etc/rc.d/*
rcorder: requirement [ICODE]avahi-daemon' in file [/ICODE]/usr/local/etc/rc.d/shairp' has no providers.
/etc/rc.d/sysctl
/etc/rc.d/dumpon
/usr/local/etc/rc.d/shairp
/etc/rc.d/natd
/etc/rc.d/dhclient
/etc/rc.d/hostid
/etc/rc.d/ddb
/etc/rc.d/gbde
/etc/rc.d/geli
/etc/rc.d/ccd
/etc/rc.d/swap
/etc/rc.d/zpool
/etc/rc.d/fsck
/etc/rc.d/zfskeys
/etc/rc.d/zvol
/etc/rc.d/growfs
/etc/rc.d/root
/etc/rc.d/serial
/etc/rc.d/sppp
/etc/rc.d/mdconfig
/etc/rc.d/hostid_save
/etc/rc.d/mountcritlocal
/etc/rc.d/zfsbe
/etc/rc.d/tmp
/etc/rc.d/zfs
/etc/rc.d/var
/etc/rc.d/cfumass
/etc/rc.d/cleanvar
/etc/rc.d/FILESYSTEMS
/etc/rc.d/ip6addrctl
/etc/rc.d/rctl
/etc/rc.d/ldconfig
/etc/rc.d/kldxref
/etc/rc.d/adjkerntz
/etc/rc.d/hostname
/etc/rc.d/ippool
/etc/rc.d/netoptions
/etc/rc.d/opensm
/etc/rc.d/random
/etc/rc.d/iovctl
/etc/rc.d/ipsec
/etc/rc.d/autounmountd
/etc/rc.d/geli2
/etc/rc.d/mixer
/etc/rc.d/ugidfw
/etc/rc.d/kld
/usr/local/etc/rc.d/uuidd
/etc/rc.d/ipfilter
/etc/rc.d/devmatch
/etc/rc.d/ipmon
/etc/rc.d/ipnat
/etc/rc.d/addswap
/etc/rc.d/ipfs
/etc/rc.d/netif
/etc/rc.d/ppp
/etc/rc.d/rtsold
/etc/rc.d/static_ndp
/etc/rc.d/static_arp
/etc/rc.d/pfsync
/etc/rc.d/devd
/etc/rc.d/pflog
/etc/rc.d/stf
/etc/rc.d/resolv
/etc/rc.d/routing
/etc/rc.d/bridge
/etc/rc.d/zfsd
/etc/rc.d/ipfw
/etc/rc.d/defaultroute
/etc/rc.d/routed
/etc/rc.d/pf
/etc/rc.d/route6d
/etc/rc.d/ipfw_netflow
/etc/rc.d/blacklistd
/etc/rc.d/netwait
/etc/rc.d/local_unbound
/etc/rc.d/NETWORKING
/etc/rc.d/pppoed
/usr/local/etc/rc.d/sndiod
/etc/rc.d/ctld
/etc/rc.d/iscsid
/etc/rc.d/nfsuserd
/etc/rc.d/kdc
/etc/rc.d/kfd
/etc/rc.d/gssd
/etc/rc.d/ipropd_master
/etc/rc.d/kadmind
/etc/rc.d/ipropd_slave
/etc/rc.d/nfscbd
/etc/rc.d/kpasswdd
/etc/rc.d/iscsictl
/etc/rc.d/mountcritremote
/etc/rc.d/motd
/etc/rc.d/devfs
/etc/rc.d/newsyslog
/etc/rc.d/mdconfig2
/etc/rc.d/archdep
/etc/rc.d/accounting
/etc/rc.d/os-release
/etc/rc.d/cleartmp
/etc/rc.d/dmesg
/etc/rc.d/wpa_supplicant
/etc/rc.d/gptboot
/etc/rc.d/hostapd
/etc/rc.d/virecover
/etc/rc.d/syslogd
/etc/rc.d/linux
/etc/rc.d/sysvipc
/etc/rc.d/hastd
/etc/rc.d/bsnmpd
/etc/rc.d/pwcheck
/etc/rc.d/power_profile
/etc/rc.d/savecore
/etc/rc.d/auditd
/etc/rc.d/watchdogd
/etc/rc.d/ntpdate
/etc/rc.d/localpkg
/etc/rc.d/SERVERS
/etc/rc.d/auditdistd
/etc/rc.d/rpcbind
/etc/rc.d/nisdomain
/etc/rc.d/nfsclient
/etc/rc.d/ypserv
/etc/rc.d/ypbind
/etc/rc.d/ypldap
/etc/rc.d/ypxfrd
/etc/rc.d/ypupdated
/etc/rc.d/ypset
/etc/rc.d/yppasswdd
/etc/rc.d/keyserv
/etc/rc.d/quota
/etc/rc.d/automountd
/etc/rc.d/automount
/etc/rc.d/mountd
/etc/rc.d/nfsd
/etc/rc.d/statd
/etc/rc.d/lockd
/etc/rc.d/DAEMON
/etc/rc.d/rtadvd
/etc/rc.d/rwho
/etc/rc.d/ubthidhci
/etc/rc.d/sdpd
/etc/rc.d/local
/etc/rc.d/lpd
/etc/rc.d/bootparams
/etc/rc.d/mountlate
/etc/rc.d/nscd
/etc/rc.d/ntpd
/etc/rc.d/powerd
/etc/rc.d/rarpd
/etc/rc.d/apm
/etc/rc.d/hcsecd
/etc/rc.d/utx
/etc/rc.d/moused
/usr/local/etc/rc.d/dbus
/usr/local/etc/rc.d/git_daemon
/etc/rc.d/ftp-proxy
/etc/rc.d/rfcomm_pppd_server
/etc/rc.d/swaplate
/etc/rc.d/apmd
/etc/rc.d/bthidd
/usr/local/etc/rc.d/avahi-daemon
/etc/rc.d/bluetooth
/usr/local/etc/rc.d/avahi-dnsconfd
/etc/rc.d/LOGIN
/etc/rc.d/msgs
/etc/rc.d/cron
/etc/rc.d/sendmail
/etc/rc.d/sshd
/etc/rc.d/inetd
/etc/rc.d/syscons
/etc/rc.d/sysctl_lastload
/etc/rc.d/ftpd
/etc/rc.d/othermta
/etc/rc.d/bgfsck
/etc/rc.d/jail
/etc/rc.d/securelevel
 
OBACHT! Ich weiss nicht wieso aber es geht wieder. Meine NAS spielt Musik via Airplay von meinen iMac.

RCORDER meckkert imma noch:
rcorder: requirement avahi-daemon' in file /usr/local/etc/rc.d/shairp' has no providers.

Aber egal - Hier meine letzte (Endgültige???) config:

Code:
#!/bin/sh 

# PROVIDE: DAEMON shairp
# REQUIRE: avahi-daemon
# BEFORE:  LOGIN


. /etc/rc.subr 

name="shairp" 
start_cmd="/usr/local/bin/shairport-sync &" 
stop_cmd=":" 
rcvar=shairp_enable


load_rc_config $name 
: ${shairp_enable="no"} 
: ${shairp_msg="Nothing started."}

shair_start() 
{
	echo "Nothing started."
}

run_rc_command "$1"
 
Dann kann ich davon ausgehen das das Netzwerk iO ist.
Es gibt ja den Meta-Tag NETWORKING. Oder auch DAEMON. Da ist auch erst da, wenn Netzwerk funktioniert.
siehe dazu auch die Manpage von rc

Aber was soll ich bei "Provide" angeben???
Das kannst Du selbst angeben. Das wird dafür benötigt, falls ein anderer Dienst von Dir abhängig ist. Der gibt das dann in seinem REQUIRE an.
In Deinem Fall (hast Du ja auch so gewählt) beispielsweise: shairp

# PROVIDE: DAEMON shairp
Das DAEMON würde ich da rausstreichen. Das "providest" Du ja nicht.
 
Und mit Daemon haste natürlich recht. & ist imma QuickAndDirty
Das mit daemon statt & verwenden hat auch den Seiteneffekt, dass das mit Logs schreiben einfacher geht (mit -o oder den Syslog-Optionen), und man damit häufig sieht wenn eine Error-Message oder ähnliches geschrieben wird, weil Networking oder sonst etwas nicht passt.
 
Zurück
Oben