【新旧対応】Linuxでの自動起動の設定方法を解説

linux 自動起動スクリプト
  • このエントリーをはてなブックマークに追加
  • Pocket

Linuxの起動時にコマンドやプログラムを自動で実行したい場合どうするか? Windowsだとスタートアップに入れて終了だが、Linuxでは方法が違う。

このページでは、Linuxの起動時にプログラムを自動実行させる方法についてお伝えする。細かいところまで解説を行ったので、自動起動に関してはここのページで必要知識を網羅できるだろう。

Linuxの自動起動

現在、Linuxのシステム起動には2種の方法が混在している。

SysVinit系とsystemdの2種類だ。古くて安定的に動いているものはSysVinit系が多く、現場ではこちらに出会う確率が高い。

しかし、最近出た新しいディストリビューションでは新しいsystemdが採用されている。

  • CentOS 7
  • SUSE Linux Enterprise Server 12
  • Fedora 15以降
  • Ubuntu 15

などのディストリビューションはsystemdが使われている。

それぞれ起動の方法が違うため、両方を分けて見ていこう。まずはSysVinit系だ。

SysVinit系の自動起動

SysVinitはUNIX系のOSで広く使われてきた起動システムだ。こちらの方が現場ではまだまだ現役で使われていることが多い。

SysVinit系の起動プロセス

まずはそもそもの起動プロセスを少々ご説明しよう。

  1. 電源が入る
  2. BIOSが起動し、ハードウェアを初期化
  3. ブートローダが起動し、Linuxカーネルをメモリ上に展開する
  4. Linuxカーネルが起動
  5. ドライバなどがロードされ、最後にinitプロセスを起動
  6. 指定されたランレベルに応じた起動処理を実行
  7. ログインを受け付け開始

これが基本的な起動プロセスだ。initプロセスの中で自動起動を設定することになる。

設定ファイル

自動起動の設定ファイルは次のとおりだ。目的に合わせて編集するといい。もっと簡単なコマンド操作は次の項目でお伝えするので、そこに飛んで見て頂いても構わない。

/etc/rc.sysinitファイル

ファイルシステムのマウントなど基本的な処理を担当するファイルだ。内部はシェルスクリプトになっている。

ランレベルに関わらず実行されるスクリプトだ。RedHat系のディストリビューションでは/etc/rc.d/rc.sysinitのシンボリックリンクになっている。

rc.sysinit

/etc/rc0.d 〜 rc6.d ディレクトリ

ランレベルごとの起動スクリプトが配置されている。例えばランレベル3のときは、/etc/rc3.dディレクトリ以下のスクリプトが実行される。

/etc/init.dディレクトリ以下の起動スクリプトシンボリックリンクをこのディレクトリに入れれば自動起動する。

実際の中身を見てみよう。

rc0.d

Sではじまるものと、Kではじまるものがあるのに気がつくだろう。

ファイル名がS(Start)で始まるスクリプトは、そのランレベルになったときに開始されるスクリプトだ。ファイル名がK(Kill)で始まるスクリプトはそのランレベルになったときに終了されるサービスだ。

ファイル名を変更すれば自動起動するように設定ができる。

# mv /etc/rc3.d/K60nfs /etc/rc3.d/S60nfs

これだけでOKだ。

/etc/rc.local

起動時に実行するホスト固有の処理を書いておくスクリプトだ。

スクリーンショット 2016-05-20 15.29.17

ここに書いておくことで、独自のコマンドやスクリプトを実行することができる。

chkconfigコマンド

より簡単にコマンドで設定をする方法をご紹介しよう。chkconfigコマンドを使用することでデフォルトで起動するサービスを設定することができる。

chkconfig --list

システムサービスの一覧を表示するにはchkconfig --listと入力する。chkconfigコマンドのみでも同じように動作する。

# chkconfig

chkconfig

0〜6の数字はランレベルだ。ランレベルによって、自動起動するサービスには「on」が、起動しないものには「off」が記述されている。

chkconfig on

chkconfig [--level ランレベル] サービス名 on

自動起動するには上のコマンドを使用する。httpdを自動起動onにするには、

# chkconfig httpd off

ランレベルを指定するには --levelオプションを使う。

# chkconfig --level 3 httpd on

複数のランレベルを同時に設定したければ、

# chkconfig --level 345 smb off

となる。

また、そもそもサービス一覧に表示されていない場合、

# chkconfig --add サービス名

で追加できる。削除は、

# chkconfig --del サービス名

だ。

systemd系の自動起動

続いてsystemd系の自動起動について見ていこう。こちらは新しいディストリビューションに搭載されているものだ。

この先、実際の現場で出会うことも多くなっていくはずなのでチェックしておいたほうがいいだろう。

systemdはこれまでのSysVinit系と大分違う。サービス起動スクリプトで定義されていたものがUnitという形になる。サービスを管理するというより、Unitを管理するという形だ。

systemd系の起動プロセス

次のプロセス順序で起動していく。

  1. 電源が入る
  2. BIOSが起動し、ハードウェアを初期化
  3. ブートローダが起動し、Linuxカーネルをメモリ上に展開する
  4. Linuxカーネルが起動
  5. ドライバなどがロードされ、systemdプロセスを起動
  6. default.targetというUnitが処理される
  7. システムの用途に適したターゲットが処理される
  8. ログインを受け付け開始

これが基本的な起動プロセスだ。default.target(/etc/systemd/system/default.target)は他のターゲットへのシンボリックリンクとなっている。

サービスの起動

systemdではsystemctlコマンドを使ってサービス(Unit)を管理する。

例をあげると次のようになる。

従来(SysVinit)
# /etc/init.d/httpd start

systemd
# systemctl start http.service

有効化されているUnitの一覧は次のコマンドで表示できる。実際には、systemctlコマンドだけでも同じものが表示される。

# systemctl list-units

インストールされているUnitファイルの一覧を表示するにはlist-unit-filesオプションを利用する。yumでhttpdをインストールすると次のようになる。

systemd

サービスの自動起動

自動起動に関してもこちらのコマンドを利用する。

自動起動設定
systemctl enable サービス名.service

自動起動解除
systemctl disable サービス名.service

下記のコマンドになる。

# systemctl enable httpd.service

enable

これでhttpdサービスが自動起動するようになる。見ての通りシンボリックリンクがはられているのがわかるだろう。

起動の確認には、

$ systemctl list-unit-files | grep httpd

などでも構わないが、

systemctl is-enabled サービス名.service

is-enabled

でも確認ができる。

その他サブコマンド

systemctlの他のサブコマンドも含めて一覧で紹介しておこう。

  • start:サービスの起動
  • stop:サービスの終了
  • restart:サービスを再起動
  • reload:サービスの設定をもう一度読み込む
  • status:サービスの状況を表示する
  • enable:サービスが自動的に起動するようにする
  • disable:サービスが自動的に起動しないようにする
  • list-unit-files:すべてのUnitを表示する

SysVinit系と大分変わってきているが、今後の主流になる方法論だ。この機会にマスターしておいて損はない。

まとめ

Linuxの自動起動についてSysVinit系、systemd系共にまとめてみた。SysVinitからsystemdに代わり、サービスの起動は大きく代わっていることもぜひ覚えて押してほしい。

まずはあなたが使っているディストリビューションがどちらを使っているか把握し、それからコマンドを叩いて自動起動を設定しよう。

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

このページの続きや関連ページは下記から一覧で確認できます。

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメント

コメントを残す

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する