eine *.sh zeitgesteuert starten
hi,
kann man das mit dem betriebsystem eigenen mitteln bewerkstelligen das sich eine *.sh datei zu einem bestimmten zeitpunkt ausführt?
mfg
Antwort schreiben
Antwort 2 von Anna... vom 21.08.2020, 22:07 Options
ah danke,
versuche ich mal, wobei jetzt wenn ich das durchlese der at befehl eher das richtige für mich wäre.
na ich schau mal
mfg
Antwort 3 von Jaja vom 24.08.2020, 08:41 Options
der at befehl setzt den folgenden befehl aus und führt ihn erst zur angegebenen zeit aus.
das überlebt keinen neustart und wird auch nur ein einziges mal ausgeführt -ist also nicht was du suchst..
ja die cron jobs sehen kompliziert aus - ist aber eigentlich ganz einfach.. hilfe findest du auch auf deinen system nach eingabe von "man cron" und "man crontab". weiterhin gibt es im netz endlos s.g. howto zu cron .. googlwe nach howto cron. verstehst du eine anleitung nicht, hast du so alternativen die es anders erklären bis du es raffst ;)
alternativen zu cron wären startup scripte, di bei jedem systemstart ausgeführt werden. wenn deine anwendung immer nur dann ausgeführt werden sollen, wenn das system gestartet ist, wäre das die beste lösung (und einfachste)..
Antwort 4 von Anna... vom 26.08.2020, 20:25 Options
hi,
naja eigentlich möchte ich das unregelmässig immer mal wieder über nacht starten und der pc bleibt sowieso immer an.
den starte ich nur einmal pro woche neu wenn der gerade nicht am arbeiten ist.
den at befehl kann ich eingeben, kann ihn mir auch anzeigen lassen
ABER es wird nicht ausgefüht.
ich habe da irgendwo was von berechtigungen gelesen, kann das sein das ich das da irgendwo erst aktivieren muss?
danke mfg
Antwort 5 von Jaja vom 26.08.2020, 20:39 Options
hmm - eigentlich nicht.
1. setze deinen befehl mal in einfache quotes, also ' eventuell hilft das..
2. an sonsten sollte sowohl "at" als auch der gewünschte befehl mit den rechten deines nutzers audgeführt werden.. demnach darf der befehl auch nicht höhere rechte erwarten, wie z.b. root.
3. was du hoffentlich NICHT gemacht hast, ist die konsole zu schließen, denn das beendet die session am virtuellen terminal und der befehl wird natürlich nicht ausgeführt.
gib mal in einem terminal "jobs" ein - das sind auszuführende befehle, die noch nicht beendet sind. setze einen job hinein, z.b. "top &" (das & verschiebt den task in den hintergrund), schaue dir "jobs" an, in dem nun top auftaucht.
schließe das terminal, mache es wieder auf und gucke wieder per "jobs" nach - top is weg, weil beendet.
entweder benutzt du für diese sachen ein "echtes" terminal ([strg]-[alt]-[F1] bis [F6] sind konsolen, [F7] deine grafische oberfläche) oder du benutzt "screen", ein befehl um eine/mehrere session zu starten, die auch das schließen des terminals überleben..
screen benötigt aber ein bisschen einarbeitungszeit, lese und lerne "man screen", wenn es installiert ist.
Antwort 6 von Anna... vom 26.08.2020, 21:11 Options
entschuldige das ich auf das oben geschriebene nicht eingehe, aber das sind böhmische dörfer für mich.
also ich habe einfach eine konsole geöffnet und dann eingegeben
at –f test.sh 15:03
da lief aber nix, also habe ich um 15:05 in die immer noch geöffnete konsole
atq eingegeben.
da stand das dann auch da mit einer zahl vorne dran und weil da nix lief habe ich das mit
atrm gelöscht.
soweit der stand der dinge.
mfg
Antwort 7 von Jaja vom 26.08.2020, 21:31 Options
hmm..
kannst du test.sh "von hand" starten?
das wäre voraussetzung.
also ./test.sh sollte funktionieren, wenn nicht musst du mit
chmod a+x test.sh
dein script auch als ausführbar kennzeichnen.
Antwort 8 von Jaja vom 26.08.2020, 21:37 Options
aso.. hab das -f übersehen, dann is obiges geschwafel natürlich käse.. deine endung .sh hat mich irritiert, da das kennzeichen für ein script sein sollte.. hoffe in dieser datei steht in der ersten zeile nicht #! das wäre unzulassig, da ein scipt! obiges geschwafel würde dann wieder sinn machen, aber ohne -f!
also guck in deine test.sh, ob es ein script ist (erste zeile fängt mit #! an), wenn ja, dann test.sh mit chmod ausführbar machen und at ohne parameter -f starten.
wenn es kein script ist, schau doch mal ob deine systemzeit stimmt (befehl date) und poste mal was test.sh enthält.
Antwort 9 von Supermax vom 26.08.2020, 21:51 Options
AT (wie auch CRON) haben möglicherweise ein anderes Arbeitsverzeichnis als das Verzeichnis, in dem dein Script liegt; es ist daher empfehlenswert, den kompletten Pfad, also z.B. /home/USERNAME/test.sh als Parameter bei AT bzw. in der crontab anzugeben; wenn das Script auf externe Dateien zugreift, sollte im Script ebenfalls explizit mittels cd das Arbeitsverzeichnis gesetzt werden.
Antwort 10 von Jaja vom 26.08.2020, 21:56 Options
hmm.. ich merke grad das mein ausdruck nich so toll ist: ich erkläre es nochmal:
1. die datei test.sh soll also befehle enthalten, die ausgeführt werden sollen.
dabei kann es eine einfache liste dieser befehle sein, damnach steht in der ersten zeile schon der erste befehl.
in diesem fall ist dein kommando "at -f test.sh hh:mm" schon richtig, und ein anderes problem besteht.
nachdem du mit "date" die systemzeit+datum überprüft hast,
teste einfach mal at in dem einfach so "at hh:mm", es kommt ein neuer promt at> und du gibts was zum testen ein, also z.b. >>notify-send "test test test"<< drückst ein mal enter und drückst dann [strg]+[D], um die eingabe zu beenden. neuer job ist gesetzt und es sollte nun zur angegebenen zeit eine nachricht auf deinem desktop erscheinen mit "test test test".
2. wenn die datei test.sh so wie ihre endung es anzeigt ein script sein, also in der ersten zeile auch so was steht wie "#! /bin/sh" war dein befehl falsch..
zuerst hast du das script ausführbar zu machen mit "chmod a+x test.sh", danach testest du das script mit "./test.sh". klappt alles hast du 2 möglichkeiten.
a) du startest "at hh:mm" und gibtst beim neuen promt at> ein: ./test.sh und drückst nach 1x enter [strg]+[d].
b)du schreibst in eine neue datei (ich sag mal test2) in die erste zeile ./test.sh und speicherst das im selben verzeichnis wie test.sh
dann kannst du so starten "at -f test2 hh:mm".
so sollte das klappen.