【问题标题】:Systemd can't execute script which loads kernel moduleSystemd 无法执行加载内核模块的脚本
【发布时间】:2015-02-17 16:01:02
【问题描述】:

当我尝试通过 systemd 服务执行脚本时 - 我收到错误消息并且脚本无法运行。

init_something.service 文件:

[Unit]
Description=Loading module --module_name module

[Service]
Type=oneshot
ExecStart=/usr/lib/systemd/init_script

[Install]
WantedBy=multi-user.target

init_script 文件:

#!/bin/bash -
/usr/local/bin/init.sh --module_init

现在如果我尝试通过 systemctl 启动服务,我会收到错误消息:

# systemctl start init_something.service
Job for init_something.service failed. See 'systemctl status init_something.service' and 'journalctl -xn' for details

# systemctl status init_something.service
init_something.service - Loading module --module_name module
    Loaded: loaded (/usr/lib/systemd/init_something.service)
    Active: failed (Result: exit-code) since Thu 1970-01-01 08:00:24 CST; 1min 49s ago
    Process: 243 ExecStart=/usr/lib/systemd/init_script (code=exited, status=1/FAILURE)
    Main PID: 243 (code=exited, status=1/FAILURE)

但如果我尝试手动运行 init_script - 它可以完美运行:

# /usr/lib/systemd/init_script
[  447.409277] SYSCLK:S0[...]
[  477.523434] VIN: (...)
Use default settings
map_size = (...)
u_code version = (...)
etc.

最后模块加载成功。

那么问题来了——为什么systemctl不能执行这个脚本,但是手动就没有问题了?

【问题讨论】:

    标签: embedded-linux systemd


    【解决方案1】:

    为了运行任何脚本文件,系统需要 shell。但是 systemd 没有自己的外壳。所以你需要提供shell来运行脚本。 所以在你的服务单元中使用ExecStart=/bin/sh /usr/lib/systemd/init_script

     [Unit]
    Description=Loading module --module_name module
    
    [Service]
    Type=oneshot
    ExecStart=/bin/sh /usr/lib/systemd/init_script
    
    [Install]
    WantedBy=multi-user.target
    

    还有

    chmod 777 /usr/lib/systemd/init_script
    

    在运行脚本之前。

    【讨论】:

      猜你喜欢
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      相关资源
      最近更新 更多