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