サーバーで実行すると、次のコマンドはリモートAiXサーバーで正しく機能します。
ls -ltr /tmp/*.pid | grep "$(date '+%b %e')"
出力:
-rwx-rwx-rw-- ........ Oct 1 /tmp/new.pid
echo $?
0
を使用して上記のコマンドを実行しようとしましたが、ssh
失敗しました。以下の出力を参照してください。
ssh [email protected] -C 'ls -ltr /tmp/*.pid | grep "$(date "'"+%b %e"'")"'
echo $?
1
注:このコマンドはansible自動化によって取得されます"$(date '+%b %e')"
。grep "$(date "'"+%b %e"'")"
-name: Chek is pid file was modified today
raw: "ls -ltr /tmp/{{ another_folder }}/*.pid | grep \"$(date '+%b %e')\""
register: pidfiledet
この問題を解決し、コマンドをリモートで実行する方法を提案しますか?
更新:回答と説明セクションでユーザーが提案したコマンドを実行しましたが、sshが失敗しました。以下は、提案された回答のデバッグモードで失敗したSSHの出力です。
$ ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/app/mysshkeys/id_rsa"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="tbaadm"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ControlPath=/home/targetuser/.ansible/cp/f623d39604 -tt 10.9.9.12 'ls -ltr /tmp/prjfolder/bin/*.pid | grep "$(date +%b\ %e)"'
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug3: kex names ok: [curve25519-sha256,[email protected],diffie-hellman-group14-sha1,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,gss-gex-sha1-,gss-group14-sha1-]
debug1: auto-mux: Trying existing master
debug2: fd 3 setting O_NONBLOCK
debug2: mux_client_hello_exchange: master version 4
debug3: mux_client_forwards: request forwardings: 0 local, 0 remote
debug3: mux_client_request_session: entering
debug3: mux_client_request_alive: entering
debug3: mux_client_request_alive: done pid = 73756
debug3: mux_client_request_session: session request sent
debug1: mux_client_request_session: master session id: 2
debug3: mux_client_read_packet: read header failed: Broken pipe
debug2: Received exit status from master 1
Shared connection to 10.9.9.12 closed.
SSHを使用して渡された上記のコマンドは、ターゲットホストでローカルで実行されると正しく機能します。
答え1
残念ながら、私はそれに慣れていませんansible
が、混在しているように見え、ansible
問題は参照を破るようにコマンドを変換する別のプロセスなので、コマンドのその部分から参照を削除するのが役立ちます。
次の基本的なコマンドを試してみる価値があります。
ls -ltr /tmp/*.pid | grep "$(date +%b\ %e)"
翻訳者がこの内容も破ることができるか疑問が残っています。
答え2
どういう意味なのか説明してないじゃん」失敗する「それでは推測しかできません。
リモートで実行するためにパイプライン全体をパッケージ化する代わりに、必要な部分をリモートで実行し、残りの部分をローカルで実行できます。
ssh [email protected] -C 'ls -ltr /tmp/*.pid' | grep "$(date '+%b %e')"
このタスクの最大の利点は、(確かに私の考えでは)参照を単純かつ明確に保つことです。ネットワークパイプを通過するデータ量と時間帯の違い(例
date
:
ソースマシンのタイムゾーンがわかっている場合は、date
ローカルで実行している場合でも使用するように指示できます。
ssh [email protected] -C 'ls -ltr /tmp/*.pid' | grep "$(TZ=Europe/Paris date '+%b %e')"
終了ステータスコードは、単に
grep
一致するものがないことを意味するかもしれません。あなたの場合、これがバグかどうかはわかりませんが、ssh
コマンドの最終終了ステータスを返すのは通常の動作です。ssh remoteHost true; echo SS=$? SS=0 ssh remoteHost false; echo SS=$? SS=1
答え3
Ansibleがわかりませんが、これは有効なsshコマンドです。
ssh [email protected] 'touch /tmp/test.pid; ls -ld /tmp/*.pid | grep -- "$(date "+%b %d")"'
GNU!binutils
注:AIXサーバーにインストールしてもsshを介して実行されるコマンドは、またはなしで/opt/freeware/bin
最小パスを使用するため、/usr/local/bin
以下を使用するにはフルパスを使用してくださいGNU!ls
。
ssh [email protected] 'touch /tmp/test.pid; /usr/local/bin/ls -ld /tmp/*.pid | grep -- "$(date "+%b %e")"'
編集:date
%-シーケンス情報:GNU!lsと互換性がありますAIX!ls
。%d
%e