You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SunOS开机自动运行Python脚本失败,求排查遗漏配置步骤

SunOS下init.d脚本未自动启动的排查与修复步骤

以下是你遗漏的关键操作和配置要点:

  • 脚本未遵循SunOS init.d规范
    SunOS的init.d脚本必须能接收start、stop等参数,系统启动时会向rc2.d链接指向的脚本传递start参数。你的Python脚本需要添加参数处理逻辑,示例框架如下:

    #!/usr/bin/env python
    import sys
    import subprocess
    import os
    
    def start_service():
        # 后台启动服务,需避免脚本挂起
        subprocess.Popen(
            [sys.executable, "/etc/init.d/server.py", "run"],
            stdout=open("/var/log/server.log", "a"),
            stderr=subprocess.STDOUT,
            start_new_session=True
        )
    
    def stop_service():
        # 实现服务停止逻辑,例如查找并终止进程
        for line in subprocess.check_output(["ps", "-ef"]).splitlines():
            parts = line.split()
            if len(parts) > 1 and b"/etc/init.d/server.py" in parts[-1] and b"run" in parts[-1]:
                pid = int(parts[1])
                os.kill(pid, 15)
    
    if __name__ == "__main__":
        if len(sys.argv) < 2:
            print("Usage: {} start|stop".format(sys.argv[0]))
            sys.exit(1)
        
        cmd = sys.argv[1]
        if cmd == "start":
            start_service()
        elif cmd == "stop":
            stop_service()
        elif cmd == "run":
            # 这里写服务的核心运行逻辑
            pass
        else:
            print("Invalid command: {}".format(cmd))
            sys.exit(1)
    
  • rcN.d链接命名不符合规则
    SunOS中rc2.d下的S开头链接必须包含启动顺序数字(如S99server.py),系统会按数字从小到大执行启动脚本。你当前的Sserver.py没有数字,会被系统忽略。需要重新创建链接:

    rm /etc/rc2.d/Sserver.py
    ln -s /etc/init.d/server.py /etc/rc2.d/S99server.py
    

    数字可根据服务依赖调整,依赖其他服务(如网络)则用较大数字(99为最后一批启动)。

  • 缺少正确的Shebang头
    脚本开头必须添加对应Python解释器的shebang,确保系统识别执行方式:

    #!/usr/bin/env python
    

    或指定系统中Python的实际路径(如#!/usr/bin/python),可通过which python命令确认路径。

  • 未手动验证脚本可执行性
    重启前先手动测试脚本是否能正常启动:

    /etc/init.d/server.py start
    ps -ef | grep server.py
    

    如果手动执行失败,需排查脚本语法错误、依赖缺失或路径权限问题(确保root能访问脚本内涉及的所有资源)。

  • (可选)Solaris 10+推荐使用SMF服务
    若你的系统是Solaris 10或更高版本,传统rc脚本已逐步被SMF(服务管理框架)取代。通过svccfg将服务注册为SMF服务,可获得自动故障恢复、状态监控等更完善的管理能力。

内容的提问来源于stack exchange,提问作者Sarath Govind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 05:08:31