将SystemV init脚本移植到systemd

时间:2016-06-24 18:26:48

标签: linux systemd

我正在将自定义Linux init系统从SystemV移植到systemd。此init系统运行一个脚本,该脚本在绑定安装所选版本并继续启动过程之前,中断正常启动过程以处理某些固件版本控制。

使用我的SystemV设置,我有/ sbin / init调用/ etc / inittab(此时没有/ etc / rc)。然后,inittab将使用以下行启动自定义引导脚本:

si:S:sysinit:/opt/pkg/var/oem/etc/init.d/boot

由于我的脚本需要在init进程的早期运行,我想我会把它添加到sysinit.target.wants目录。

/lib/systemd/system/sysinit.target.wants/custom_init.service:

[Unit]
Description=Custom System Initialization Routine
ConditionFileIsExecutable=/etc/init.d/boot
Before=sysinit.target shutdown.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/init.d/boot

但是,当我启动系统时,出现以下错误:

basic.target: Found ordering cycle on basic.target/start
basic.target: Found dependency on sysinit.target/start
basic.target: Found dependency on custom_init.service/start
basic.target: Found dependency on basic.target/start
basic.target: Breaking ordering cycle by deleting job custom_init.service.service/start
custom_init.service.service: Job custom_init.service.service/start deleted to break ordering cycle starting with basic.target/start
[ SKIP ] Ordering cycle found, skipping Custom System Initialization Routine

我认为.service文件应该在执行sbin / init(lib / systemd / systemd)后立即运行。 sysinit.target.wants是否为此操作的正确位置?

有关如何重写此.service文件以执行与旧的inittab相同的角色而没有此订购问题的任何想法?我想尽可能少地对引导脚本本身进行更改。

0 个答案:

没有答案