• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Skript aus /bin automatisch nach boot starten [gelöst]

Znarf

Member
Hallo Leute
ich habe hier ein altes opensuse 11.2 "standalone" (ohne Internet etc.), das ich als Faxserver nutze und gelegentlich für Druckaufträge benötige. Hierfür habe ich Turboprint vs. 2.37.1 installiert, damit auch etwas neuere Drucker genutzt werden können. Das funktioniert soweit auch, allerdings lässt sich der Turboprint-Dämon tpdaemon mit dem normalen Startbefehl nicht starten
Code:
/etc/init.d/tpdaemon start
TPDAEMON_START not set - TurboPrint daemon not started
use instead: tpdaemon forcestart
.
Mit dem Befehl
Code:
/etc/init.d/tpdaemon forcestart
TP-Daemon Version 2.37-1
Debug Level set to 0
TurboPrint daemon started
läuft der Dämon und ich kann die diversen Drucküberwachungs- und wartungsfunktionen von Turboprint nutzen.

Also habe ich ein kleines Skript in /bin geschrieben und mit chmod a+rwx für alle ausführbar gemacht:
Code:
#!/bin/sh
#startet Turboprint tpdaemon manuell
/etc/init.d/tpdaemon forcestart
. Das funktioniert, allerdings kommt immer die Passwortabfrage. Diese kann man zwar mit Enter übergehen (der Daemon startet ohne Eingabe des root-Passworts), aber leider kann ich das dann so nicht in den KDE-Autostart eingeben.

Hat mir jemand einen Tipp, wie ich den automatischen Start einrichten kann (ich dachte evtl. in /etc/boot.local, aber da bin ich mir nicht sicher, ob mir das den Bootprozess (zer)stören kann, weil ggf. notwendige andere Dienste noch nicht geladen sind; eine /etc/after.local gibt es bei openSUSE 11.2 leider noch nicht).

Danke für jeden Tipp. Gruß Z.
 

josef-wien

Ultimate Guru
Zweitens könntest Du /etc/init.d/after.local ja anlegen. Erstens solltest Du herausfinden, welcher Inhalt in der Variable TPDAEMON_START erwartet wird, und diesen entweder in einer Turboprint-Konfigurationsdatei oder zur Not in /etc/init.d/boot.local (das meines Wissens vor den Skripten des jeweiligen runlevel ausgeführt wird) setzen.
 
OP
Z

Znarf

Member
...hmm, das weiß ich leider nicht was TPDAEMON_START erwartet..
Aber betr. boot.local: Ich hatte mir laienhaft vorgestellt, hier in etwa so etwas einzutragen
Code:
sleep 120
/bin/Turboprint_Forcestart.sh
um sicherzugehen, dass der Dienst nicht "zu früh" startet. Aber du meinst, ich könnte das auch in eine neu angelegte after.local schreiben, und das System macht das dann auch ?

Viele Grüße
 

abgdf

Guru
Znarf schrieb:
Code:
/etc/init.d/tpdaemon forcestart
Das funktioniert, allerdings kommt immer die Passwortabfrage. Diese kann man zwar mit Enter übergehen (der Daemon startet ohne Eingabe des root-Passworts), aber leider kann ich das dann so nicht in den KDE-Autostart eingeben.
Dem solltest Du wohl nachgehen, warum diese Passwortabfrage (nicht für das root-Passwort) kommt, und ob es eine Möglichkeit gibt, diesen Dämon (den ich leider nicht kenne) auch ohne zu starten (z.B. mit einer speziellen Option über eine Pipe; oder etwa über eine sudo-Einrichtung).

Taucht der Dienst eigentlich in Yast in "System/Runlevel-Editor" oder "System/Diensteverwaltung" auf?
Da kann man sonst auch einstellen, ob der Dienst beim Systemstart gestartet werden soll. Die Vorgaben von Yast für den Zeitpunkt sind meistens ok. "Runlevel 3" wäre bei brauchbarem System, aber vor der grafischen Oberfläche. "Runlevel 5" wäre dann, wenn die grafische Oberfläche schon verfügbar ist.
 

josef-wien

Ultimate Guru
Der einzige Erfolg Deines "so etwas" wird sein, daß der Startvorgang an dieser Stelle um 2 Minuten angehalten wird. Hier braucht es schon ein Konstrukt wie:
Code:
(
sleep 30
/etc/init.d/tpdaemon forcestart
) &
Aber davor solltest Du einen Versuch mit /etc/init.d/after.local machen. Und an erster Stelle scheint mir ein Blick in die Datei /etc/init.d/tpdaemon zweckmäßig zu sein.
 
OP
Z

Znarf

Member
Danke für den Tipp. Darf ich fragen was die Klammern bzw, das endständige & bewirken ?

Ich werde das mit der after.local versuchen. Aber vorher schau ich, ob ich mit einem passenden Eintrag in der crontab nicht auch zum Ziel komme (der Rechner rebootet 1x täglich, und danach mach ich den Eintrag). Werd schauen obs morgen funktioniert hat und berichten. Erstmal besten Dank.
 
OP
Z

Znarf

Member
Nachtrag: Ja, der tpdaemon ist im Runlevel-Editor eingestellt (enabled) und aktiviert (Runlevel 2,3,5) - aber die Statusabfrage sagt trotzdem "not running". Turboprint ist eine kommerzielle, aber wenig kostspielige Linux-Druckertreiber-Sammlung http://www.turboprint.de, womit man auch neue Drucker relativ problemlos auf älteren "Linuxen" betreiben kann.

Gruß Z.
 

josef-wien

Ultimate Guru
Die Klammern bewirken, daß die enthaltenen Befehle in einer Sub-Shell ausgeführt werden. Wenn Du an einen beliebigen Befehl ein & anhängst, wird nicht auf die Erledigung des Befehls (im vorliegenden Fall auf die Erledigung der in der Sub-Shell auszuführenden Befehle) gewartet.

Mich würde trotzdem die Datei /etc/init.d/tpdaemon interessieren, denn dort liegt die eigentliche Ursache Deines Problems (und lösen ist immer besser als umgehen).



Znarf schrieb:
die Statusabfrage sagt trotzdem "not running"
Nachdem der Dienst sofort mit einer Fehlermeldung beendet wird, ist die Aussage korrekt.
 
OP
Z

Znarf

Member
Hallo zusammen

also mein Workaround mit dem crontab Eintrag für den "forcestart" Befehl klappt jetzt soweit. Ist keine saubere "Lösung" ich weiß.

Hier nochmals der Text der /etc/init.d/tpdaemon
Code:
#!/bin/sh

############################################################################
# tpdaemon
#
# Script to start/stop TurboPrint printer port daemon 
# (c) ZEDOnet GmbH
# Created 15-Nov-07
# 22-12-08 added Required-Start / Required-Stop entries in header
# 19-01-12 removed "&" after "tprintdaemon" (start in background) 
#          as it caused problems with systemd
############################################################################
### BEGIN INIT INFO
# Provides:          tpdaemon
# Required-Start:
# Required-Stop:
# Should-Start:      $ALL
# Default-Start:     2 3 5
# Default-Stop:      0 1 6
# Short-Description: TurboPrint usb port daemon 
# Description:       monitor usb ports while no print jobs are active
#                    make printer status information available to
#                    turboprint-monitor and kde/gnome applets
### END INIT INFO

########
# get Turboprint settings
########
eval $(cat "/etc/turboprint/system.cfg")

# set default user if not set in system.cfg

if [ -z $TPDAEMON_USER ] ; then
	TPDAEMON_USER="lp"
fi

# set default start mode if not set in system.cfg

if [ -z $TPDAEMON_START ] ; then
	TPDAEMON_START="1"
fi


########
# get pid of tprintdaemon
########
pid=$(pgrep tprintdaemon)

case $1 in
	restart)
		killall tprintdaemon
		sleep 1
		su -s /bin/sh $TPDAEMON_USER -c "/usr/bin/tprintdaemon 0" || /usr/bin/tprintdaemon 0
		echo "TurboPrint daemon restarted"
		;;
	forcestart)
		su -s /bin/sh $TPDAEMON_USER -c "/usr/bin/tprintdaemon 0" || /usr/bin/tprintdaemon 0
		echo "TurboPrint daemon started"
		;;
	start)
		if [ $TPDAEMON_START -eq 1 ] ; then
			su -s /bin/sh $TPDAEMON_USER -c "/usr/bin/tprintdaemon 0" || /usr/bin/tprintdaemon 0
			echo "TurboPrint daemon started"
		else
			echo "TPDAEMON_START not set - TurboPrint daemon not started"
			echo "use instead: tpdaemon forcestart"
		fi
		;;
	stop)
		killall tprintdaemon
		echo "TurboPrint daemon stopped"
		;;
	status)
		if [ $pid ] ; then
			echo "TurboPrint daemon is running, pid=$pid"
		else
			echo "TurboPrint daemon is not running"
		fi
		;;
	*)
		echo "Usage: tpdaemon {start|stop|status|forcestart}"
esac

exit 0
Offensichtlich wurde in der Historie ab 2012 ein "&" an verschiedenen Stellen entfernt, weil es mit systemd nicht funktionierte. Mein System ist aber von 2011 und läuft noch mit sysvinit...aber ob ich jetzt da noch drangehen will...
 

abgdf

Guru
Znarf schrieb:
also mein Workaround mit dem crontab Eintrag für den "forcestart" Befehl klappt jetzt soweit.
Ah, ok.
Verantwortlich für das Warten auf eine Passworteingabe dürfte die Zeile mit "su -s ..." hier sein:
Code:
forcestart)
		su -s /bin/sh $TPDAEMON_USER -c "/usr/bin/tprintdaemon 0" || /usr/bin/tprintdaemon 0
		echo "TurboPrint daemon started"
Damit wird versucht, "/usr/bin/tprintdaemon" als der User, der in $TPDAEMON_USER gespeichert ist, auszuführen.
Dein cronjob wird wahrscheinlich als root ausgeführt. root kann mit "su" ohne Passworteingabe ein beliebiger Benutzer werden. Deshalb geht das wahrscheinlich, ohne daß es an einer Passworteingabe hängenbleibt.

Ich würde die Stelle - nach einem Backup - mal zu dem ändern:
Code:
forcestart)
		# su -s /bin/sh $TPDAEMON_USER -c "/usr/bin/tprintdaemon 0" || /usr/bin/tprintdaemon 0
		/usr/bin/tprintdaemon 0
		echo "TurboPrint daemon started"
Wenn das auf der Konsole macht, was es soll, würde ich "/etc/init.d/tpdaemon forcestart" ans Ende von "/etc/init.d/boot.local" eintragen. Und dann prüfen, ob das wiederum geht.

Daß Dein System von 2011 ist, hat mit all dem nichts zu tun. Das ist schließlich nicht Steinzeit. ;)
 

spoensche

Moderator
Teammitglied
Die Variable
Code:
TPDSTART
findest du entweder in der Datei /etc/turboprint/system.cfg oder unter /etc/default/turboprint oder unter /etc/sysconfig/turboprint
 
OP
Z

Znarf

Member
Also ich poste hier mal die Datei /etc/turboprint/system.cfg
Code:
TP_CUPS=1
TP_UNIT=1
TP_LANGUAGE=de
TP_CHARSET=de_DE
TP_INSTALLATIONSTATE=0
TPBIN_BROWSER=firefox
TPFILE_PRINTCAP=/etc/printcap
TPPATH_CONFIG=/etc/turboprint
TPPATH_SHARE=/usr/share/turboprint
TPPATH_SPOOL=/var/spool/lpd
TPPATH_BIN=/usr/bin
TPPATH_FILTERS=/usr/lib/turboprint
TPPATH_DOC=/usr/share/turboprint/doc
TPPATH_LOG=/var/log
TPPATH_VAR=/var/spool
TPPATH_TEMP=/tmp
TPPATH_MAN=/usr/share/man
TPPATH_CUPSDRIVER=/usr/share/cups/model
TPPATH_CUPSSETTINGS=/etc/cups/ppd
TPPATH_CUPSLIB=/usr/lib/cups
TPPATH_CUPSLIB64=/usr/lib64/cups
TPOWN_SPOOLDIR=lp
TPMOD_SPOOLDIR=0755
TPOWN_SPOOLFILE=lp
TPMOD_SPOOLFILE=0640
TPDAEMON_START=0
TPDAEMON_USER=lp
TPDAEMON_GROUP=lp
TPDAEMON_PORT=5552
TPDAEMON_SERVER=1
TPUSE_GSZEDO=1

Betr
# su -s /bin/sh $TPDAEMON_USER -c "/usr/bin/tprintdaemon 0" || /usr/bin/tprintdaemon 0
/usr/bin/tprintdaemon 0
echo "TurboPrint daemon started"

das funktioniert auf der Konsole weder als User noch als root...

Und: ja, cronjob hab ich als root angelegt, das ermöglicht aber problemloses Arbeiten mit den Printwerkzeugen für alle User.

Gruß Z.
 
OP
Z

Znarf

Member
oh...nach dem Aufruf des Komandozeilen Befehls
/usr/bin/tprintdaemon 0
started der Daemon leider jetzt auch mit dem forcestart Kommando nicht mehr...das ist natürlich nun blöd und eine Verschlimmbesserung. Kann ich da was zurückdrehen ???
In den messages steht
Code:
TUSB_Daemon: TP-Daemon already installed...quitting
 

josef-wien

Ultimate Guru
Znarf schrieb:
/etc/turboprint/system.cfg
Code:
TPDAEMON_START=0
Auch wenn mir nicht klar ist, auf welchem Weg das Skript zu den Informationen aus dieser Datei kommt, dürfte eine Änderung von 0 auf 1 dazu führen, daß der Aufruf mit start funktioniert.
 
OP
Z

Znarf

Member
Der stop Aufruf bringt nichts startet jetzt danach weder mit start noch mit forcestart...
Das andere 1 statt 0 werd ich morgen ausprobieren
Gruß
 

abgdf

Guru
Keine Panik. Man kann ja alles wiederherstellen.
Zeig' doch nochmal bitte den aktuellen Text von "/etc/init.d/tpdaemon".
 
Oben