システム単位で動的日付を使用する

システム単位で動的日付を使用する

システム単位でログファイル名の一部として日付出力を使用しようとしています。ここの例:

[Unit]
Description=TCS minetest server unit

[Service]
Type=simple
ExecStart=/home/tcs/minetest/bin/minetestserver --worldname world --logfile /home/tcs/logs/debug_$$(date +%%Y_%%m_%%d).txt
ExecReload=/bin/kill -HUP $MAINPID
User=tcs

[Install]
WantedBy=multi-user.target

しかし、ログファイルを取得します。

ls /home/tcs/logs/
'debug_$(date'

現在の日付をログファイル名として使用するには?

ベストアンサー1

このタイプの構文は直接サポートされません。system.service のマニュアルページ:

構文はシェル構文に触発されましたが、次の段落で説明するメタ文字と拡張のみを理解し、変数は異なる方法で拡張されます。特に、"<"、"<<"、"">"、および">>"を使用したリダイレクト、"|"を使用したパイプ、"&"を使用したバックグラウンドでのプログラム実行、およびその他のシェル構文要素はサポートされていません。

「次の段落」には、主にデフォルトの環境変数置換、パス検索、およびいくつかのCエスケープが含まれます。

通常、プロセスをセットアップするために独自のシェルスクリプトを作成し、そのスクリプトをsystemdサービスのオプションとして指定することで、ExecStartこれらの制限を解決できます。

場合によっては、日付の置き換えをシェルに明示的に渡すことで機能させることができます。

ExecStart=/bin/bash -c '/home/tcs/minetest/bin/minetestserver --worldname world --logfile /home/tcs/logs/debug_$(date +%Y_%m_%d).txt'

おすすめ記事