K8s cron ジョブで複数のコマンドを実行しようとしています。ただし、ログには最初のジョブの出力のみが表示されます。次のようになります:
containers:
- name: myjob
image: postgres
args:
- /bin/sh
- -c
- PGPASSWORD=$(echo $password) psql -h $host -p 5432 -U $username -d $db -c "\copy (select * from blah limit 1) to blah.txt" ; echo bar.txt ; cat bar.txt;
- PGPASSWORD=$(echo $password) psql -h $host -p 5432 -U $username -d $db -c "\copy (select * from foo limit 1) to foo.txt" ; date ; echo foo.txt ; cat foo.txt;
restartPolicy: OnFailure
最初のコマンドの出力しか表示されません。複数のコマンドを指定して、1 つずつ実行できるようにしたいと思います。
答え1
or演算子-c
の後に1行で結合するだけです&&
;
完全な回答を見るここ
答え2
2つのコマンドを実行するだけでPod の標準手順。
command: ["/bin/sh","-c"]
args: ["command one; command two && command three"]
しかし、それは良い考えではないと思う最後の希望として使われるべきです。コンテナ1つのプロセスのみを実行するように設計されているCronJobsはポッド仕様。
したがって、私は次のことをお勧めします。順序は重要です。
- タスクが完全に独立している場合は、2 つの個別の CronJob を実行します。
- CronJob で 2 つの別々のコンテナを実行します。コンテナの 1 つが失敗すると、CronJob は失敗します。
- 使用
initContainers
事前に何らかの秩序や準備を達成すること。