Systemd无法执行加载内核模块的脚本

时间:2015-02-17 16:01:03

标签: embedded-linux systemd

当我尝试通过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不能执行这个脚本,但手动它没问题?

1 个答案:

答案 0 :(得分:1)

对于运行任何脚本文件,系统需要shell。但是systemd确实有自己的shell。所以你需要提供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

在运行脚本之前。