2017-10-23 19 views
0

Puppetのプロビジョニングでは、毎回人形を動かす問題があります。 perodic cronジョブ実行を使用するマスターレス構成です。bash test cmdがargsが多すぎると失敗します

exec { 'postgresql::server::database::action1': 
     command => "sudo -u postgres psql -d ${db_name} -a -f /opt/folderx/v2/createdb.sql", 
     path => '/usr/pgsql-9.5/bin:/usr/bin:/bin', 
     user => 'root', 
     onlyif => "test $(sudo -u postgres psql -d ${db_name} -c 'SELECT version();' ; echo $?) -ne 0", 
    } 

質問のみの正しい構文は何ですか? bashシェルでは私が取得します:

のbash:テスト:あまりにも多くの引数

基本的に私は、テストに必要ないくつかのテーブルや関数が$ dbameには存在しない

答えて

2

はにpostrgres psql -d ...印刷何かをしますスクリーン? yesの場合、その出力はパラメータとしてtestに渡されます。出力を非表示にするには、... > /dev/nullを使用して出力をリダイレクトできます。

test $(someCommand; echo $?) -ne 0はあまりに複雑です。ちょうど! someCommandと書いてください。そうすれば、おそらく出力をリダイレクトする必要はありません。

onlyif => "! sudo -u postgres psql -d ${db_name} -c 'SELECT version();' > /dev/null", 
+0

bashと正しいpostgresの構文yes。しかし、それはテストcmdで動作しませんでした。とにかくあなたのコード例は私を助け、人形はもはやexec関数を呼び出さないでしょう。私はすぐに逆のテストをしますが、うまくいくようです。 –

+0

他のソリューションは、ファイルの内容が変更されたときにのみスクリプトが実行されます... 'file {" /opt/folderx/v2/createdb.sql ": audit => 'content' } ' –

関連する問題