Ich versuche, eine systemd-Unit-Datei zu erstellen, die ein Argument für ein PHP-Skript verwendet.

Das kleine PHP-Skript:

<?php
$val = $argv[1];

while(true) {
        echo "Argument = $val\n";
        sleep(1);
}
?>

Die Entwickler arbeiten am echten Skript. Alles, was ich zum Testen tun muss, ist ein Argument zu verwenden, das in der systemdUnit-Datei übergeben wird. Hier ist es:

[email protected]

[Unit]
Description=Systemd Params Test
Wants=network-online.target
After=network-online.target

[Service]
Environment=ARGS=%I
ExecStart=/usr/bin/php /home/myself/test_systemd.php $ARGS
StandardOutput=file:/var/log/test-multiple-systemd-$ARGS.log

[Install]
#Start after boot
WantedBy=multi-user.target

Ich starte die Mehrfachinstanzen mit systemctl start [email protected]und systemctl start [email protected]. Bei der Überprüfung der Dienste sehe ich:

[email protected]:/lib/systemd/system# systemctl --type=service | grep test
[email protected]      loaded active running Systemd Params Test                                                          
[email protected]      loaded active running Systemd Params Test 

Es werden nicht die verschiedenen Protokolldateien erstellt. Es wird nur ein einziges erstellt, seltsamerweise mit Anführungszeichen:

-rw-r--r-- 1 root root 285 Dec 8 08:15 'test-multiple-systemd-$ARGS.log'

Und der Inhalt der Protokolldatei ist meistens "Argument = bar". Nur einige wenige Fälle von "Argument = foo"aus irgendeinem Grund:

cat /var/log/test-multiple-systemd-\$ARGS.log

Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = bar
Argument = foo <--- WHY???
Argument = foo
Argument = foo
Argument = foo
Argument = foo
Argument = foo

Ist es möglich, für jede Instanz der systemd-Unit in unterschiedliche Protokolldateien zu schreiben? Ich würde gerne sehen test-multiple-systemd-foo.logund test-multiple-systemd-bar.logob das die Argumente sind, die ich übergebe. Ich habe versucht, das $im Protokollpfad zu entkommen , ohne Erfolg. Ich habe versucht, Anführungszeichen zu entfernen und hinzuzufügen, Environment="$ARGS=%I"auch ohne Erfolg. Das Protokoll wird immer in Anführungszeichen mit dem Literal "$ARGS"im Namen angezeigt .

AKTUALISIEREN

Es scheint, dass ich die mehreren Protokolldateien gemäß dieser Antwort nicht dynamisch erstellen kann .

Also habe ich das Log-Schreiben im PHP-Skript erstellt mit:

echo file_put_contents("/var/log/test-multiple-systemd-$val.log", "Argument=$val", FILE_APPEND);

Wird das ausreichen? Ich erhalte jetzt die mehreren Protokolldateien und sie schreiben das Argument richtig in die Protokolldatei.

no answer