rc.localを使えない環境でマシン起動時にコマンドを実行する

はじめに

こんにちは、野村です。

前回、VirtualBoxに共有フォルダを設定する方法を紹介しました。

VirtualBoxに共有フォルダを設定する方法
VirtualBoxに共有フォルダを設定する方法を紹介します。ホスト-ゲスト間でフォルダを共有させると、ファイルの受け渡しなどで便利です。

でも課題が残っているのです。
仮想マシンを起動したときに共有フォルダを自動マウントさせたかったのだけど、最近のLinuxにはrc.localがないのですね。困りものです。

で、童爺さんに相談したらsystemdの存在を教わりました。ありがとう!

というわけで今回は「マシン起動時にコマンドを実行する方法」を紹介します。

cronを使う方法

間違ったやりかた

あるサイトを見て、crontabで以下のように@rebootを指定すると、cron起動時にコマンドを実行させることができると知ったのですよ。

@reboot コマンド

簡単そうなので、すぐに試しました。
管理ユーザになって、コマンド「crontab -e」を実行し、以下を追記。

@reboot mount -t vboxsf vmdir /home/jake/vmdir

で、仮想マシンを再起動したところ、共有フォルダがマウントされてませんでした。残念。

正しいやりかた

管理ユーザになって、ファイル「/etc/rc.local」を作成します。
内容は以下の通り。

#!/bin/sh

mount -t vboxsf vmdir /home/jake/vmdir

保存したらコマンド「chmod 755 /etc/rc.local」でファイルに実行権限を与えます。
そのあと、コマンド「crontab -e」を実行し、以下をコードを追記。

@reboot /etc/rc.local

再起動後、共有フォルダがマウントされていました。お手軽ですね。

systemdを使う方法

別の方法として、systemdを使えばrc.localを再現できるとのこと。

ファイル「rc.local」を設置

なにはともあれ管理ユーザになって、ファイル「/etc/rc.local」を作成。
内容は以下の通り。

#!/bin/sh

mount -t vboxsf vmdir /home/jake/vmdir

保存したらコマンド「chmod 755 /etc/rc.local」でファイルに実行権限を与えます。

サービスファイルを作成

/etc/systemd/system/rc-local.service というファイルを作成します。

# vim /etc/systemd/system/rc-local.service

内容は以下の通り

[Unit]
Description=/etc/rc.local compatibility

[Service]
Type=oneshot
ExecStart=/etc/rc.local
# disable timeout logic
TimeoutSec=0
#StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

サービスの自動起動設定

以下のコマンドを実行します。

# systemctl enable rc-local.service

設定は以上です。

再起動すると、共有フォルダがマウントされていました!

最後に

これ以外にも、update-rc.dを使う方法も試したけど、失敗しました。
もしかしたら設定次第では通ったのかも知れない。でもなんだか難しそう。

今回のことから、腰を据えてsystemdを勉強しなきゃいけない気がしましたよ。
でもそのうちでいいや。

というわけで、今回はこれにて。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

野村 野村のプロフィール
枕は高いほうがいい。高いほうが本を読みやすいのですよ。なので広めのタオルケットを何重にも折りたたんでその上に枕を載せてその上に頭を載せてたりする。twitterやってます