php soll at ausführen

3 views
Skip to first unread message

Jan Novak

unread,
Sep 20, 2021, 5:03:22 AMSep 20
to
Hallo,

kann mir jemand sagen, warum das hier unter Linux nicht funktioniert:


$cmd='echo "test>/tmp/test.txt" | at 10:50';
echo shell_exec($cmd);

# gleiches mit
exec($cmd);

(wobei die Zeit im php später variabel geändert werden wird)

Anstatt den Befehl um 10:50 auszuführen wird er immer sofort ausgeführt,
aber dennoch ein atq Eintrag ohne den eigentlichen Befehl erstellt.
Auf der (linux) Konsole funktioniert der Befehl.


Jan

Arno Welzel

unread,
Sep 20, 2021, 5:45:31 AMSep 20
to
Jan Novak:

> kann mir jemand sagen, warum das hier unter Linux nicht funktioniert:
>
>
> $cmd='echo "test>/tmp/test.txt" | at 10:50';
> echo shell_exec($cmd);

Bedeutet:

1) Führe folgendes Kommando aus:

echo "test>/tmp/test.txt"

2) Leite stdout an dieses Kommando weiter an:

at 10:50

> # gleiches mit
> exec($cmd);
>
> (wobei die Zeit im php später variabel geändert werden wird)
>
> Anstatt den Befehl um 10:50 auszuführen wird er immer sofort ausgeführt,
> aber dennoch ein atq Eintrag ohne den eigentlichen Befehl erstellt.

Definiere "ausgeführt". Wird /tmp/test.txt erstellt?

> Auf der (linux) Konsole funktioniert der Befehl.

Auch da bedeutet es nichts anderes, als eben ein echo auszuführen und
das Ergebnis von stdout an at weiterzuleiten. Das Ergebnis wäre, dass in
at folgendes Kommando landet:

test>/tmp/test.txt

Wenn Du at sagen willst, dass um 10:50 ein echo-Befehl ausgeführt werden
soll, der etwas nach /tmp/test.txt schreiben soll, wäre das wie folgt:

echo 'echo "test>/tmp/test.txt"' | at 10:50


--
Arno Welzel
https://arnowelzel.de

Jan Novak

unread,
Sep 20, 2021, 6:24:15 AMSep 20
to
Am 20.09.21 um 11:45 schrieb Arno Welzel:
>> Anstatt den Befehl um 10:50 auszuführen wird er immer sofort ausgeführt,
>> aber dennoch ein atq Eintrag ohne den eigentlichen Befehl erstellt.
>
> Definiere "ausgeführt". Wird /tmp/test.txt erstellt?

Ja, mit dem Wort "test".


>> Auf der (linux) Konsole funktioniert der Befehl.
>
> Auch da bedeutet es nichts anderes, als eben ein echo auszuführen und
> das Ergebnis von stdout an at weiterzuleiten. Das Ergebnis wäre, dass in
> at folgendes Kommando landet:
>
> test>/tmp/test.txt
>
> Wenn Du at sagen willst, dass um 10:50 ein echo-Befehl ausgeführt werden
> soll, der etwas nach /tmp/test.txt schreiben soll, wäre das wie folgt:
>
> echo 'echo "test>/tmp/test.txt"' | at 10:50

_genau_ das ist es.
Natürlich muss der 2. Echo Befehl rein.
Danke.


Jan

Reply all
Reply to author
Forward
0 new messages