it-swarm.com.de

Das Dienstprogramm "at" kann nicht verwendet werden

Ich benutze Ubuntu 16.04 und versuche direkt auf Bash auszuführen:

Sudo cat << EOF | at 'now + 1 minute'
echo "hello"
EOF

Ich bekomme:

warning: commands will be executed using /bin/sh job 6 
at Wed Dec 28 03:01:00 2016
Can't signal atd (permission denied)

Wenn also keine Berechtigung zum Ausführen des Befehls vorhanden ist, wird der Ausdruck hello in Bash nicht wiedergegeben.

Wenn ich Sudo verwende, warum wird die Erlaubnis verweigert? Im Gegensatz zu cd, bei dem es sich nicht um ein Hilfsprogramm, sondern um einen integrierten Shell-Befehl handelt, sind at (und cat) Hilfsprogramme, daher sollten Sudo sie anwenden .

Vielleicht wissen Sie, warum at nicht verwendet werden kann?

5
JohnDoea

TL; DR: Bewegen Sie Sudo über die Pipe (|) Zum Befehl at.

Sie haben at nicht wirklich als root ausgeführt.

Sie haben cat als root (Sudo cat ...) Ausgeführt und die Ausgabe von cat an at weitergeleitet, aber Sie haben den Befehl at nicht selbst als root ausgeführt .

Auf vielen Systemen dürfen einige Nicht-Root-Benutzer bei Jobs ausgeführt werden. Wenn Sie dies jedoch nicht möchten, Ihr System so konfiguriert ist, wie Sie es möchten, und Sie beabsichtigen, diesen bestimmten Job als Root auszuführen, können Sie das Problem lösen, indem Sie at anstelle von cat als Root ausführen ] _. (In diesem Fall müssen Sie cat nicht als root ausführen.)

Dazu setzen Sie Sudo vor at anstelle von cat:

cat << EOF | Sudo at 'now + 1 minute'

Optionale Angaben:

Derzeit haben Sie:

Sudo cat << EOF | at 'now + 1 minute'
echo "hello"
EOF

Das führt cat als root mit Sudo aus und übergibt ihm echo "hello" (Mit Here-Document-Syntax). Die Standardausgabe des Befehls cat wird an den Befehl at 'now + 1 minute' Weitergeleitet, der nicht als root ausgeführt wird. Daher versucht at, den Job als den Nicht-Root-Benutzer zu planen, der ihn ausgeführt hat (Sie).

Wenn Sie möchten, dass der at-Job als Root ausgeführt wird, können Sie dieses Problem beheben, indem Sie Folgendes ändern:

cat << EOF | Sudo at 'now + 1 minute'
echo "hello"
EOF

Wenn Sie später ein Benutzerkonto ohne Rootberechtigung konfigurieren, mit dem Sie Aufträge ausführen dürfen, führen Sie dannkeine als Rootbefehl aus:

cat << EOF | at 'now + 1 minute'
echo "hello"
EOF
10
Eliah Kagan