Linux hängt auf Befehl?


1

Ich habe ein Problem mit dem Linux-Befehl "at", und es ist ziemlich schwierig, "at" zu googeln. Das Problem ist, dass alles, was ich starte, scheinbar nie aufhört.

Hier ist ein einfaches Skript, das ich erstellt habe (ich habe meinen Benutzernamen durch USER ersetzt):

#!/bin/bash
echo "Testing" > /local/USER/tmp.txt

Ich habe die obigen Zeilen in einer Datei /local/USER/tmp.sh abgelegt und die Datei ausführbar gemacht. Laufen es mit

/local/rarandje/tmp.sh

funktioniert wie erwartet und erstellt die entsprechende Datei.

Wenn ich es jetzt mit dem Befehl 'at' versuche:

at -f /local/USER/tmp.sh now + 1 min

Es startet zur gewünschten Zeit, hängt sich aber dort auf. Dies ist die Ausgabe von at -l:

10      Wed Jan 21 15:06:00 2015 = USER
10      Wed Jan 21 15:06:00 2015 a USER

Die tmp.txt-Ausgabedatei wird nicht erstellt. Die Prozessliste enthält weder den Befehl 'echo' noch den Befehl 'tmp.sh'. Daher verstehe ich das Problem nicht wirklich und kann es nicht debuggen.

Zu beachten ist, was relevant sein kann, obwohl es auch völlig irrelevant sein kann und Sie ablenken kann: Der Root-Benutzer hat keine Berechtigungen für meinen Basisordner (ich bin in einem Unternehmen, das Basisordner im Netzwerk speichert und über NAS bereitgestellt wird (Der lokale Root-Benutzer auf meinem Computer hat also nicht einmal die Berechtigung, den auf dem NAS gemounteten Ordner zu lesen, da der lokale Root nicht mit dem Remote-Root identisch ist.) Allerdings hat root definitiv Lese- / Schreibzugriff auf / local / USER /, da dies nur eine lokale Festplatte ist. Ich bin mir nicht sicher, ob dies in irgendeiner Weise relevant ist, z. B. gibt es am Anfang des at-Befehls etwas, das von root ausgeführt wird und das mein Bash-Profil oder was auch immer lesen muss, aber es macht trotzdem keinen Sinn, würde ich bei Erwarten Sie am wenigsten, dass der Job fehlschlägt und nicht kontinuierlich "ausgeführt" wird.

Ich bin auf Ubuntu 12.04.4 und habe (lokalen) Root-Zugriff. Danke im Voraus.

BEARBEITEN: Ich habe gerade das Gleiche wie ein Root-Benutzer versucht, dh ich habe nur den gleichen Befehl ausgeführt wie der Root-Benutzer, und alles funktioniert einwandfrei, die Ausgabedatei wird erstellt und der Job wird beendet.

Antworten:


2

Nachdem @maiki diesen Kommentar gepostet hat und ich mir den angeschaut /var/log/syslogund diesen Fehler gesehen habe (ich habe ihn mit HOSTNAME und USERID anonymisiert):

Jan 21 17:53:32 HOSTNAME atd[27285]: Userid USERID not found - aborting job       14 (a0000e016998f5)

Nachdem ich ein bisschen gegoogelt habe, habe ich diesen Beitrag gefunden, der im Grunde sagt, dass atd nach ypbinding ausgeführt werden soll, wenn der Computer gestartet wird, wenn es nicht lokale Benutzer gibt (ich bin kein Experte in der Art, wie der Computer eingerichtet ist, ich habe ein Netzwerk) Benutzername, mit dem ich mich mit meinem PC verbinde, und jeder aus meiner Firma kann sich auf die gleiche Weise mit meinem PC verbinden). Ich habe gerade atd mit neu gestartet sudo service atd restartund meine ' at' -Jobs laufen jetzt einwandfrei . Ich weiß nicht, wie ich das dauerhaft beheben soll, damit ich mich nicht jedes Mal neu starten muss, wenn ich den Computer neu starte, aber ich werde versuchen, es herauszufinden (und diese Antwort zu bearbeiten)


0

Füge deinen Benutzernamen hinzu /etc/at.allow(erstelle ihn, wenn er nicht existiert)

Wie in der Manpage beschrieben:

  • Falls /etc/at.allowvorhanden, haben die genannten Benutzer Zugriff aufat
  • Andernfalls /etc/at.denyhaben alle Benutzer mit atAusnahme der in der Datei genannten Zugriff .
  • sonst hat nur root Zugriff auf at

Die Datei existiert nicht, ich habe sie erstellt und meinen Benutzernamen hinzugefügt. Mein Benutzer ist in /etc/at.deny nicht vorhanden. Es hat nicht funktioniert, es gibt keine Veränderung. Wäre es mir nicht erlaubt, "at" zu verwenden, würde dies zu Beginn gemeldet (z. B. aus Spaß). Ich habe versucht, meinen Namen in "/etc/at.deny" einzufügen, und beim Versuch, "at" zu starten, wurde "at" angezeigt 'Sie haben keine Erlaubnis, um zu verwenden.')
Relja Arandjelović

@ user1939941 Bei deiner Frage sprichst du darüber mounted via NAS. Ist es ein NFS-Mount? atSendet einen Fehler per E-Mail an den aufrufenden Benutzer. Hast du welche bekommen? Wenn Sie > /local/USER/tmp.txtaus Ihrem Skript entfernen , funktioniert es?
Maiki

Ich weiß nicht, wie ich überprüfen soll, ob es sich um ein NFS-Mount handelt, aber ich denke, das ist es. Ich erhalte überhaupt keine Mail von 'at', aber ich habe auch einige Probleme mit 'mail' bemerkt, die ich zu lösen versuche (ich kann Mail von root an USER senden, aber nicht von USER an root, Ich kann zwar eine Nachricht an mich selbst senden (USER an USER), bin mir aber nicht sicher, ob eine Verbindung besteht. Das Entfernen der > /local/USER/tmp.txtNachricht macht keinen Unterschied, und ich würde es nicht erwarten, da sowohl USER als auch root dort Schreibzugriff haben (ich habe dies überprüft und manuell ausgeführt) das Drehbuch ohne 'at')
Relja Arandjelović

1
@ user1939941 starte at -f /local/USER/tmp.sh nowund überprüfe die neuesten Zeilen von /var/log/messagesund/var/log/secure
maiki

Danke, das hat mich in eine gute Richtung geführt und ich habe es jetzt gelöst! Ich werde die Lösung in Kürze als separate Antwort veröffentlichen. Übrigens, für Ubuntu 12.04 befinden sich diese Protokolle an verschiedenen Stellen: / var / log / syslog und /var/log/auth.log (?)
Relja Arandjelović
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.