私は、他のマシンにログインしてサービスが動作していることを確認し、起動、停止、または終了するデーモンを作成しています。このため、unixコマンドは少し長くなり、難読化されます。複雑なunixコマンド内のpgrep/pkillコマンドでネガティブな先読みを作成する
APPは、リモート実行の名前で、APP_IDが起動時にアプリケーションに渡されたパラメータであるbash -c 'ssh -p 22 [email protected] pgrep -fl "APP.*APP_id=12345"'
:
形成されているコマンドの基本的な形状が似ています。
リモート側で実行されている実行可能ファイルは、のようなもので開始されます。このコマンドの終了ステータスは、リモートサービスが実行されているか、正常に開始されたり殺されたかどうかを判断するために使用され
/path/to/APP configs/config.xml -v APP_id=12345 APP_port=2345 APP_priority=7
。
ローカルマシンでテストするとき、sshはローカルマシンに接続して作業を簡単にしますが、この方法で呼ばれるpgrepは、サーバーが実行しているチェックコマンド。
例えば、pgrepコマンドが返すことがあります。
26308 ./APP configs/config.xml APP_id=128bb8da-9a0b-474b-a0de-528c9edfc0a5 APP_nodeType=all APP_exportPort=6500 APP_clientPriority=11
27915 ssh -p 22 [email protected] pgrep -fl APP.*APP_id=128bb8da-9a0b-474b-a0de-528c9edfc0a5
をだから、論理的な次のステップは、「ssh」を除外するためのpgrepパターンを変更することでしたが、のpgrepはPCREしてコンパイルされていないようですので、これは不可能だが
bash -c 'ssh -p 22 [email protected] pgrep -fl "APP.*APP_id=12345" \\| grep -v ssh'
:回避策として、私はgrepのを使用していたので、
bash -c -'ssh -p 22 [email protected] preg -fl "\(?!ssh\).*APP.*APP_id=12345"
これは正規表現のエラーがスローされます。たとえば、先読みを可能バージョン
これは回避策ですが、これはpgrepを使用してクエリを実行する場合に効果的です。 grepのが効果的であるためには何の機会がありませんので、しかし、pkillはを使用して次のステップでは動作しません:pkillコマンドも終了ステータスが悪いことになりssh接続を殺すため
bash -c 'ssh -p 22 [email protected] pkill -f "APP.*APP_id=12345"'
はうまく動作しません。だから、私は自分のpgrep/pkillパターンを変更し、多くの運を持たないことに戻ります。
この環境には、(この場合には、APPは、「時計」になります)パスワードなし自体へのSSHことができ、ローカルマシン上の単純なものでシミュレートすることができます:ここで
watch echo APP_id=12345
は、簡単に言えば質問です:pgrepで 'APP'とはどのように 'ssh user @ host APP'とマッチしませんか?
必要なパターンをよりよく理解するためにプロセスリストを含めると便利です。 –
[systemd user instance](https://wiki.archlinux.org/index)を使用するとよいでしょう。php/Systemd/User)を使用して、* systemd *があなたのサービスを管理できるようにします。 –
@JürgenHötzelリモートマシンはクラウドインスタンスです...私はsystemdのために書いているサービスをインストールすることは可能ですが、それはかなりの質問ではありません...私はいくつかの正規表現の構文がないかと思います。私は気づいていません。 –