rc.local碰到status=203/EXEC 和 Exec format error错误
你遇到的 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 来去除回车符。
- 点赞
- 收藏
- 关注作者
评论(0)