systemdを介して実行されるサービスにIntel Pinツールを適用する最良の方法は何ですか?

systemdを介して実行されるサービスにIntel Pinツールを適用する最良の方法は何ですか?

使いたいインテルピンツールopen-ssh サーバーを検出します。コマンドに従う以外に、これを行う方法はありません。

$PIN_HOME/pin -t somepintool.so -- /usr/sbin/sshd

だから主にpinツールを使ってsystemctlを利用してサービスを検出する方法を知りたいのですが、方法が見えないので、systemctlを利用せずにsshdサービスを停止する方法だけ知れば処理できます。

私の考えはsshdプロセスを終了することです。これは良い考えですか?他に提案がありますか?

よろしくお願いします。

答え1

同時に実行しない2つのサービスがある場合は、次の点を考慮してください。Conflicts=この[Unit]セクションにアイテムを追加するテストサービス:

Conflicts=

スペースで区切られた単位名のリスト。否定的な要件依存関係を構成します。あるデバイスConflicts=に別のデバイスの設定がある場合、前者を起動すると後者も停止し、その逆も同様です。この設定は順序依存関係とは無関係で直交してAfter=いることに注意してくださいBefore=

デバイスBと競合するデバイスAがデバイスBと同時に起動するようにスケジュールされている場合、トランザクションは失敗するか(両方がトランザクションの一部である場合)、変更されるように変更されます(必要なものの1つまたは両方の場合)。タスクは取引の不可欠な部分ではありません)。後者の場合、不要なタスクが除去された場合、またはその両方が不要な場合、競合するデバイスが起動し、競合するデバイスが停止します。

したがって、これは機能することができます(テストされていません)。

ピン-sshd.service

[Unit]
Description=Pin debugging of sshd (copied from sshd.service)
After=syslog.target network.target auditd.service
Conflicts=sshd.service

[Service]
ExecStart=/path/to/pin -t somepintool.so -- /usr/sbin/sshd -D -e

[Install]
WantedBy=multi-user.target

これにより、systemd2つのサービスを同時に実行せずに正しい停止と開始を表示できます。私が見たほとんどのサービスはそれを使用するので、通常、Conflicts=shutdown.targetサービスを終了する前にサービスが完了したことを確認するために使用されているように見えますが、他の目的で使用するのを防ぐことはできません!

答え2

sshdusingなしで殺すのがなぜ役に立つのかわかりませんが、起動時にsystemdにrunを使用するようにsystemctl指示するのを防ぐことはできません。pinsshd

sudo systemctl edit ssh.service

または

sudo systemctl edit sshd.service

(どのファイルがあるかに応じて - Debian派生はssh.service、FedoraとRHEL派生は `sshd.serviceを使用します。) そして、次のように入力します。

[Service]
ExecStart=/path/to/pin -t somepintool.so -- /usr/sbin/sshd -D $SSHD_OPTS

その後、再起動してくださいsshd...

/etc/systemd/system/ssh(d?).service.d/override.confオーバーライドは名前付きコードスニペットに保存されます。これを削除すると、デフォルト定義sshdが復元されます。

関連情報