upstartを使用してサービスを作成し、動的に作成されたフォルダ構造(現在の日付に基づく)にログを出力します。

upstartを使用してサービスを作成し、動的に作成されたフォルダ構造(現在の日付に基づく)にログを出力します。

次の upstart 構成があります:

start on runlevel [2345]
stop on runlevel [06]


respawn 
respawn limit 99 5
#respawn is used to start the nodejs again, even if it fails.

env NODE_ENV=production
env PROJ=/home

script
    cd $PROJ
    cd htdocs
    exec sudo /opt/nodejs/bin/node app.js 2>&1 >> $PROJ/logs/$(date +"%Y_%m_%d_%I_%M").log
end script

これは、1分ごとに作成される動的ファイルに、STDOUTおよびSTDERRメッセージを追加します(存在しない場合は作成します)。次に、実際のフォルダーを作成します。

/ログ/2018/05/29/10_05.log

しかし、コードを変更すると

exec /opt/bitnami/nodejs/bin/node app.js 2>&1 >> $PROJ/logs/$(date +"%Y")/$(date +"%m")/$(date +"%d")/$(date +"%I_%M").log

フォルダーが存在しないため、期待どおりの出力が得られません。フォルダーが存在するかどうかを確認し、存在しない場合はフォルダーを作成するコントロールをスクリプトに追加することを考えましたが、スクリプトが実行されたときに 1 回だけ実行され、STDOUT メッセージごとに実行されることを期待していません。

これに対する解決策はあるでしょうか?

ありがとう

関連情報