テクノロイド

コンピュータやゲーム他、色々日々思ったことをつづっていきます。

Ubuntu18.04のrc0.dに置いたスクリプトが実行されない

2019-09-30 15:23:23 | Ubuntu Linux
今までUbuntuのシャットダウン時にバックアップを自動実行させるために、/etc/rc0.d/にベタなコマンドを書いただけのスクリプトを置いていた。
それがUbuntu18.04で実行されないのに気付いた。おそらくsystemdへの移行の影響だと思うが、どうすりゃいいんだ?と試行錯誤した。

ググると/lib/systemd/systemd-sysv-installでsystemdに認識させればいいのかな?とやってみるのだが、update-rc.dでエラーが出る。

host$ lxc launch ubuntu:18.04 u18g
Creating u18g
Starting u18g
root@u18g:~# cd /etc/init.d/
root@u18g:/etc/init.d# ls -l rctest
-rwxr-xr-x 1 root root 185 Sep 30 06:34 rctest
root@u18g:/etc/init.d# cat rctest
#!/bin/sh
### BEGIN INIT INFO
# Default-Stop: 0
### END INIT INFO

case "$1" in
stop)
touch /root/bar
;;
esac
root@u18g:/etc/init.d# /lib/systemd/systemd-sysv-install
Usage: /lib/systemd/systemd-sysv-install [--root=path] enable|disable|is-enabled <sysv script name>
root@u18g:/etc/init.d# /lib/systemd/systemd-sysv-install enable rctest
update-rc.d: error: rctest Default-Start contains no runlevels, aborting.
root@u18g:/etc/init.d# ls /etc/rc?.d/*rctest
ls: cannot access '/etc/rc?.d/*rctest': No such file or directory

起動時の実行は必要ないが、エラーになるので渋々Default-Start:の行を追加
root@u18g:/etc/init.d# cat rctest
#!/bin/sh
### BEGIN INIT INFO
# Default-Start: 2
# Default-Stop: 0
### END INIT INFO

case "$1" in
# start)
# touch /root/foo
# ;;
stop)
touch /root/bar
;;
esac
root@u18g:/etc/init.d# update-rc.d rctest defaults
root@u18g:/etc/init.d# ls /etc/rc?.d/*rctest
/etc/rc0.d/K01rctest /etc/rc2.d/S01rctest
root@u18g:/etc/init.d# /lib/systemd/systemd-sysv-install enable rctest ← エラーなし
root@u18g:/etc/init.d# poweroff
host$ sudo ls /var/snap/lxd/common/lxd/storage-pools/default/containers/u18g/rootfs/root/
host$ lxc start u18g ← 一度起動し直さないと設定が反映されないようだ。
host$ lxc stop u18g
host$ sudo ls /var/snap/lxd/common/lxd/storage-pools/default/containers/u18g/rootfs/root/
bar ← OK
host$

コンテナを使って色々と試してみたが、結論から言うとsystemd-sysv-installの実行は必要なくてupdate-rc.dの実行で十分だったようだ。
LXD使うと何度もコンテナを作りなおして初期状態にして試せて便利だった(^_^)