发布于2026-08-22 阅读(0)
扫一扫,手机访问
想知道服务的真实启动命令?试试systemctl show -p ExecStart 服务名吧!systemd会解析.service文件里的ExecStart=字段哦。再结合systemctl cat,就能读取完整的unit定义啦。不过要注意,环境变量得去对应的配置文件里查哦。

systemctl show 查服务的真实启动命令systemd 不直接执行 shell 脚本,而是解析 .service 文件里的 ExecStart= 字段。想看到某服务实际跑的是哪条命令,不能只看 systemctl status 的摘要,得查原始定义:
systemctl show -p ExecStart 服务名 —— 显示启动命令(含参数),比如 systemctl show -p ExecStart sshd 输出 ExecStart=/usr/sbin/sshd -D $SSHD_OPTSsystemctl cat 服务名 —— 直接打印该服务的完整 unit 文件,能看清 EnvironmentFile、ExecStartPre 等所有执行环节ExecStart 可能引用环境变量(如 $SSHD_OPTS),真实命令需结合 /etc/sysconfig/sshd 或 /etc/default/sshd 查值/etc/init.d/ 脚本里找 start) 分支CentOS 7 以前或 Debian 9 之前的老系统,服务靠 /etc/init.d/ 下的 shell 脚本控制。关键不是脚本本身,而是它内部怎么定义启动逻辑:
sudo vim /etc/init.d/nginx),搜索 start) 这个 case 分支 —— 真正的启动命令就写在里面,常见形式是 daemon --user $NGINX_USER $NGINX_BIN -c $NGINX_CONF_FILEDAEMON= 变量,很多脚本会动态拼接参数(比如检查 /etc/default/nginx 是否存在并 source 它)sudo /etc/init.d/nginx start 实际执行的就是这个分支里的全部逻辑,包括预检、权限切换、后台化等/etc/rc.local 是最直白的开机命令入口,但默认可能不执行这个文件本意是让用户加自定义命令,但它在 modern systemd 系统里默认被禁用,且执行时机晚于多数服务 —— 很多人以为写了就生效,结果发现命令根本没跑:
sudo systemctl status rc-local,如果显示 inactive (dead),说明没激活/etc/rc.local 有可执行权限(sudo chmod +x /etc/rc.local),且第一行是 #!/bin/bash;然后运行 sudo systemctl enable rc-localcurl,得自己加 until ping -c1 google.com; do sleep 1; done,否则容易失败/etc/systemd/system/multi-user.target.wants/ 这类符号链接systemd究竟启动了哪些服务,不能仅看systemctl list-unit-files这一命令的结果,更重要的是要明确「究竟是哪个target将其拉起」。即便某个服务处于enabled状态,也有可能因为对应的target未被激活而根本不会启动:
ls -l /etc/systemd/system/multi-user.target.wants/ —— 这里列出的都是真正会在 multi-user(即命令行模式)下自动启动的服务链接/usr/lib/systemd/system/xxx.service 或 /etc/systemd/system/xxx.service,后者优先级更高,覆盖前者systemctl enable xxx,本质就是在这里建个链接;删掉链接 ≠ disable,得用 systemctl disable xxx 才干净systemctl show -p ExecStart 和 systemctl cat 组合用最稳;SysVinit 下必须进 start) 分支看,光看变量名会误判;/etc/rc.local 容易被忽略启用状态;而 .wants/ 目录才是服务实际被拉起的“证据链”终点。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9