rc.local碰到status=203/EXEC 和 Exec format error错误

举报
yd_293661582 发表于 2026/11/04 09:38:30 2026/11/04
【摘要】 你遇到的 status=203/EXEC 和 Exec format error,根本原因很简单:你的 /etc/rc.local 文件缺少了第一行的 Shebang(即 #!/bin/sh 或 #!/bin/bash)。systemd 在直接执行这个文件时,内核不知道该如何解释它,于是报错。 解决方法你可以通过以下步骤修复:1. 编辑文件,添加 Shebang 行使用编辑器打开 /etc/...

你遇到的 status=203/EXEC 和 Exec format error,根本原因很简单:你的 /etc/rc.local 文件缺少了第一行的 Shebang(即 #!/bin/sh 或 #!/bin/bash)。

systemd 在直接执行这个文件时,内核不知道该如何解释它,于是报错。

解决方法

你可以通过以下步骤修复:

1. 编辑文件,添加 Shebang 行

使用编辑器打开 /etc/rc.local,在第一行(必须在 touch /tmp/rc.test 之前)加上:

#!/bin/sh -e

或者:

#!/bin/bash

修改后你的文件看起来应该是这样:

#!/bin/sh -e
touch /tmp/rc.test

注意:-e 参数表示命令出错时立即退出,是 rc.local 的常见约定。

2. 确保文件有可执行权限

虽然你之前的报错是格式错误,但权限也是必要条件。执行:

chmod +x /etc/rc.local

3. 重新启动服务验证

systemctl start rc-local.service
systemctl status rc-local.service

如果配置正确,状态应该显示 active (exited),并且 /tmp/rc.test 文件会被创建。

为什么会这样?

你手动在终端里运行脚本时,Shell 会自动识别并解释文件内容,所以没问题。但 systemd 在启动服务时,是直接通过系统调用 execve 来加载 /etc/rc.local 的。如果没有 Shebang 告诉内核“这是一个 Shell 脚本,请用 /bin/sh 来运行它”,内核就会尝试把它当作二进制程序执行,从而返回 Exec format error。

另外,还要留意一个常见陷阱:如果文件是在 Windows 下编辑过的,可能会带有 CRLF 换行符,这也会导致 Shebang 失效(报错类似 bad interpreter)。如果加上 Shebang 后仍报错,可以运行 sed -i 's/\r$//' /etc/rc.local 来去除回车符。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。