Ubuntu 18.04下用域账户运行systemd服务遇执行格式错误
我之前处理过类似的AD域用户在systemd服务中启动失败的问题,结合你的场景,咱们从几个方向排查解决:
1. 先排查systemd服务文件的语法与格式问题
你遇到的Exec format error虽然提示是执行格式错误,但有时候是服务文件本身的语法或编码问题导致的:
- 用
systemd-analyze verify servicex.service命令检查服务文件的语法,这会给出比systemctl status更详细的错误提示,比如User字段的格式是否符合要求。 - 检查服务文件是否用了Windows换行符(CRLF),可以用
cat -A servicex.service查看,如果每行结尾是^M$,说明是Windows格式,用dos2unix servicex.service转换后再重新加载启动。
2. 调整systemd服务中User字段的写法
虽然sssd.conf设置了use_fully_qualified_names = False,但systemd对AD域用户的识别逻辑和普通系统命令(比如id)不一样,它可能不支持john.doe这种格式,建议尝试以下两种标准写法:
- 域\用户名格式:比如你的AD域名为
EXAMPLE.COM,就写User=EXAMPLE\john - 用户名@域名格式:写成
User=john@example.com
修改后执行systemctl daemon-reload和systemctl start servicex.service试试,这两种是systemd识别域用户的常规方式。
3. 排除脚本本身的执行问题
虽然你用短名john启动正常,但还是确认下/v/runsvc.sh脚本的开头是否有正确的shebang(比如#!/bin/bash或#!/bin/sh),如果没有的话,即使权限正确也可能触发执行格式错误。另外可以手动执行su - john.doe -c "/v/runsvc.sh",看脚本能不能正常运行,排除用户环境的问题。
4. 检查sssd的域用户配置细节
确认/etc/sssd/sssd.conf中的域配置部分,是否有default_shell和override_homedir的正确设置,比如:
[domain/your-domain] default_shell = /bin/bash override_homedir = /home/%u
确保john.doe用户有正确的shell和家目录,虽然你说权限没问题,但systemd启动服务时可能依赖这些基础配置。
内容的提问来源于stack exchange,提问作者SteveSims
相关产品推荐
相关产品推荐

