我正在尝试创建一个 systemd 服务,为用户启动会话并在其中运行命令。它使用 PAMName 来启动适当的会话,如下所示:
[Unit]
Description=My service instance for %I
After=network.target
[Service]
Type=simple
User=%I
Environment=XDG_SESSION_CLASS=user
PAMName=my-service
# Use basic echo for testing unit functionality.
ExecStart=/bin/echo Test output
StandardOutput=journal
# Use same fd as stdout
StandardError=inherit
[Install]
WantedBy=multi-user.target
我遇到的问题是,没有任何输出显示在systemctl status
.它做出现在 中journalctl -e
,因此它已被记录,只是与单位无关。 PAMName 的文档说:
请注意,当此选项用于单元时,很可能(取决于 PAM 配置)主单元进程在激活时将迁移到其自己的会话范围单元。因此,该进程将与两个单元相关联:最初启动的单元(并为其配置了 PAMName=)和会话范围单元。然而,该进程的任何子进程将仅与会话范围单元相关联。
我希望双重关联会导致主进程的输出至少出现在 中systemctl status
,即使子进程的输出没有出现,但似乎根本没有输出。这使得在启动服务出错时查看错误所在或查看服务过去的日志变得很棘手。
使用 PAMName 时,有什么方法可以让日志消息显示为与服务单元关联(无论是通过 stdout 还是通过某些其他日志记录机制)?