Linux am Befehl hängt?

959
Relja Arandjelović

Ich habe ein Problem mit dem Linux-Befehl "at" und es ist ziemlich schwierig, bei Google zu "at". Das Problem ist, dass alles, was ich ausführte, nicht immer 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 eine Datei /local/USER/tmp.sh gestellt und die Datei ausführbar gemacht. Lass es mit laufen

/local/rarandje/tmp.sh 

funktioniert wie erwartet und erstellt die entsprechende Datei.

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

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

Die Ausführung beginnt zur gewünschten Zeit, hängt jedoch nur dort, dies ist die Ausgabe von -l:

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

Die Ausgabedatei tmp.txt wird nicht erstellt. In der Prozessliste ist kein Befehl 'echo' oder 'tmp.sh' enthalten. Ich verstehe also nicht wirklich, was das Problem ist und wie man es debuggt.

Eine Sache zu beachten, die relevant sein könnte, obwohl es auch völlig irrelevant sein kann und Sie ablenken kann: Der Root-Benutzer hat keine Berechtigungen für meinen Home-Ordner (ich bin in einer Firma, die Home-Ordner im Netzwerk speichert und über NAS gemountet wird Der lokale Root-Benutzer auf meinem Computer hat also nicht die Berechtigung, sogar den NAS-Ordner ~ zu lesen, da der lokale Root nicht mit dem Remote-Root identisch ist. Root hat jedoch definitiv Lese- / Schreibzugriff auf / local / USER /, da dies nur eine lokale Festplatte ist. Nicht sicher, ob dies in irgendeiner Weise relevant ist, z. B. befindet sich am Anfang des Befehls 'at' etwas, das von root ausgeführt wird und mein Bash-Profil oder was auch immer lesen muss, aber es macht trotzdem keinen Sinn, würde ich bei am wenigsten erwarten, dass der Job fehlschlägt und nicht kontinuierlich "läuft".

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

BEARBEITEN: Ich habe gerade dasselbe als root versucht, dh, ich habe den gleichen 'at'-Befehl wie der root-Benutzer ausgeführt, und alles funktioniert einwandfrei. Die Ausgabedatei wird erstellt und der Job wird abgebrochen.

1

2 Antworten auf die Frage

2
Relja Arandjelović

Nachdem @maiki diesen Kommentar gepostet hat, habe ich mir den angeschaut /var/log/syslogund diesen Fehler gesehen (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 wenig gegoogelt hatte, fand ich diesen Beitrag, der besagt, dass atd nach dem Starten des Computers ausgeführt werden soll, wenn der Computer gestartet wird, wenn nicht lokale Benutzer vorhanden sind (ich bin kein Experte für die Einrichtung des Computers, ich habe ein Netzwerk Benutzername, den ich für die Verbindung zu meinem PC verwende, und jeder aus meiner Firma kann auf dieselbe Weise eine Verbindung zu meinem PC herstellen). Ich habe atd gerade neu gestartet sudo service atd restartund meine ' at' -Jobs laufen jetzt einwandfrei . Ich bin mir nicht sicher, wie ich das dauerhaft beheben kann, so dass ich 'atd' nicht jedes Mal neu starten muss, wenn ich den Computer neu starte, aber ich versuche, es herauszufinden (und diese Antwort zu bearbeiten).

0
maiki

Fügen Sie Ihren Benutzernamen hinzu /etc/at.allow(erstellen Sie ihn, falls er nicht existiert)

Wie in der Manpage:

  • Wenn /etc/at.allowvorhanden, haben die genannten Benutzer Zugriff aufat
  • Anderenfalls /etc/at.denyhaben alle Benutzer Zugriff auf atdie in der Datei angegebenen.
  • sonst hat nur root Zugriff auf at
Die Datei ist nicht vorhanden, ich habe sie erstellt und meinen Benutzernamen hinzugefügt. Mein Benutzer ist nicht in /etc/at.deny vorhanden. Es hat nicht funktioniert, es gibt keine Änderung. Wenn ich 'at' nicht verwenden darf, wird dies zu Beginn gemeldet (z. B. habe ich aus Spaß versucht, meinen Namen in /etc/at.deny einzufügen, und wenn ich versuche, 'at' zu starten, würde ich bekommen "Sie haben keine Berechtigung zur Verwendung bei.") Relja Arandjelović vor 9 Jahren 0
@ user1939941 In Ihrer Frage sprechen Sie über "über NAS montiert". Ist es ein NFS-Mount? at sendet einen Fehler per E-Mail an den Benutzer, der ihn aufruft. Hast du welche bekommen? Wenn Sie `> local / USER / tmp.txt` aus Ihrem Skript entfernen, funktioniert es? maiki vor 9 Jahren 0
Ich bin nicht sicher, wie man prüft, ob es sich um ein NFS-Mount handelt, aber ich denke es ist. Ich bekomme keine E-Mails von 'at', aber ich habe auch einige Probleme mit 'E-Mail' festgestellt, die ich lösen möchte (ich kann E-Mails von root an USER senden, aber nicht von USER an root. Ich kann zwar an mich selbst senden (USER an USER), nicht sicher, ob eine Verbindung besteht. Das Entfernen von `> local / USER / tmp.txt macht keinen Unterschied, und ich würde es nicht erwarten, da sowohl USER als auch root habe dort Schreibzugriff (ich habe das Skript ohne 'at' geprüft und ausgeführt) Relja Arandjelović vor 9 Jahren 0
@ user1939941 Starten Sie `at -f /local/USER/tmp.sh now` und überprüfen Sie die neuesten Zeilen von` / var / log / messages` und `/ var / log / secure ' maiki vor 9 Jahren 1
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 posten. Übrigens, für Ubuntu 12.04 befinden sich diese Protokolle an verschiedenen Orten: / var / log / syslog und /var/log/auth.log (?) Relja Arandjelović vor 9 Jahren 0
@ user1939941 froh, dass es geholfen hat maiki vor 9 Jahren 0