将英特尔 Pin 工具应用到通过 systemd 运行的服务的最佳方法是什么?

将英特尔 Pin 工具应用到通过 systemd 运行的服务的最佳方法是什么?

我想用英特尔引脚工具检测 open-ssh 服务器。除了遵循命令之外,我不知道有什么方法可以做到这一点。

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

所以,我主要想知道如何使用 pin 工具使用 systemctl 来检测服务,但是,由于我没有看到任何方法,如果我知道如何在不使用 systemctl 的情况下停止 sshd 服务,我可以处理这个问题。

我自己的想法是杀死 sshd 进程。这是不是一个好主意?还有其他建议吗?

先感谢您。

答案1

如果您有两个不应同时运行的服务,请考虑Conflicts=在该[Unit]部分中添加条目您的测试服务:

Conflicts=

以空格分隔的单位名称列表。配置负面需求依赖性。如果一个单元Conflicts=在另一个单元上有设置,则启动前者将停止后者,反之亦然。请注意,此设置独立于 和排序依赖关系After=并与之 正交Before=

如果与单元 B 冲突的单元 A 计划与 B 同时启动,则事务将失败(如果两者都是事务的一部分)或修改为固定(如果其中一个或两个都需要)工作不是交易的必需部分)。在后一种情况下,不需要的作业将被删除,或者如果两者都不需要,则将启动冲突的单元并停止冲突的单元。

所以这可能有效(未经测试):

pin-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

这种方式systemd可以确保您没有同时运行两个服务并显示正确停止和启动。我看到的大多数服务都使用它Conflicts=shutdown.target,所以看起来它通常用于确保服务在关闭之前完成,但没有什么可以阻止您将其用于其他目的!

答案2

我不确定我是否理解为什么sshd在不使用的情况下杀死systemctl会有所帮助,但是,没有什么可以阻止您告诉 systemdpin在启动时使用sshd;跑步

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定义。

相关内容