bash Shell, at Befehl mit Skript?
Hallo,
Die Aufgabe ist es, ein Bash Skript zu schreiben, welches den Hostname, Username und das Rootverzeichnis, sowie einen derzeitigen Zeitstempel in Stunde, Minute und Sekunde ausgibt. Das Problem ist nun nur, dass wir dieses Skript mit dem Befehl "at" zu einem bestimmten Zeitpunkt, z.B. in 5min aufrufen sollen und die Ausgabe des Skripts in einer bereits vorhandenen Datei ausgabe_script anhängen sollen. Ich verwende den Befehl so: at -f script.bash >> ausgabe_script
Wenn ich den Job mit atq prüfe, passt alles. Nur passiert einfach nichts, es wird nichts in die Datei ausgabe_script geschrieben.
Die weitere Aufgabe hat mit crontabs zu tun, welche eine minütliche Ausgabe des Skriptes in die ausgabe_script Datei verwirklichen sollen. Leider funktioniert das ebenfalls nicht. Ich schätze die beiden Fehler stehen irgendwie in Verbindung. Ja ich habe at installiert und ich kann das script.bash von überall aufrufen, da ich die PATH Datei modifiziert und in die bashrc geschrieben habe.
Ich wäre sehr für Hilfe dankbar,
das Foto anbei ist der Inhalt meines Skriptes.
5 Antworten
at -f script.bash >> ausgabe_script
at sorgt dafür, dass ein Befehl oder wie hier ein Skript zu einem bestimmten Zeitpunkt ausgeführt wird. Es führt nicht den Befehl aus. ausgabe_script enthält daher nicht die Ausgabe des Skripts sondern die Ausgabe von at und die ist leer. Da du keinen Zeitpunkt angibst, wird das Skript wahrscheinlich nie ausgeführt. Wo die Ausgabe landen würde, kann ich auf die Schnelle nicht sagen, vermutlich in meesages.log.
Die Ausgabe des Skripts wird per lokaler Mail zugestellt. Damit das funktioniert, muss ein lokaler MTA laufen. Oder man lässt das Skript in eine Datei schreiben, wie hier vorgeschlagen: https://www.gutefrage.net/frage/bash-shell-at-befehl-mit-skript#answer-299665165
Hallo
das Foto anbei ist der Inhalt meines Skriptes.
Wieso kannst Du nicht einfach die13 Zeilen richtig herher kopieren statt einen blöden Bildes das mindestens 5x mehr Platz verbraucht als der reine Code?!
#!/bin/bash
h=$(date +%H) #Hour
m=$(date +%M) #Minute
s=$(date +%S) #Second
time="Der aktuelle Zeitsteempel lautet:\n$h Uhr, $m Minuten, $Sekunden\n"
echo -e $time
echo Sie sind angemeldet als Benutzer: $USER
echo Sie arbeiten mit dem Rechner: $HOSTNAME
echo Ihr Heimatverzeichnis lautet: $HOME
echo Sie nutzen als Shell: $SHELL
Soll der Zeitstempel so umständlich aussehen?
Wieso nicht einen kompletten wie diesen:
time=$(date '+%H:%M:%S')
und am Ende noch ein:
exit 0
benutzen um das Script fehlerfrei zu beenden.
Du kannst das at auch so übergeben:
echo "sh deinscript.sh" | at 23:00 PM
Linuxhase
Verstehe das vieleicht falsch aber warum schreibst du die gewünschten Daten nicht einfach in eine Datei? Z.B. so:
echo Datum=%date% >> Y:\Log.txt
echo Zeit=%time% >> Y:\Log.txt
echo NÄCHSTER LOG >> Y:\Log.txt
wobei ich es jetzt beispielhaft nur mit Datum und Zeit gemacht habe und mit einem festen Pfad.
Was sagen denn die Logdateien?
Zu cron:
Wie hast Du die crontab denn angelegt?
Und welchen Nutzernamen möchtest Du ausgeben? Für mich ergibt das wenig Sinn, es sei denn Du legst die Crontab als User-Crontab an. Dann aber mußt Du beachten, ob der Nutzer crons anlegen darf.
Zu 'at' kann ich weiter nichts sagen, da ich es nicht kenne ...
Okay entschulduge, beim at Befehl hab ich hier im Post die Uhrzeit vergessen. Also heißt das, dass ich die Ausgabe eines Skriptes mit at nur weiterleiten kann, in dem ich das ganze im Skript selbst ausführe?
Aber wenn ich es dann nur in die andere Datei weiterleite, wird es ja nicht mehr im Terminal ausgegeben oder?
Der Zeitstempel ist laut Aufgabenstellung so vorgegeben. Mein Ziel ist es, das Skript mittels at zu einem bestimmten Zeitpunkt in der Konsole auszugeben und gleichzeitig die Ausgabe in der Datei ausgabe_script zu speichern. Mit deinem Vorschlag "echo "sh deinscript.sh" | at 23:00 PM" geschieht keine Ausgabe des Zeitstempels, bzw. des Skriptes in die Konsole. Ich verstehe nicht warum? Sorry ich bin kein Linux Profi, eher ein Anfänger.