Linux起動時スクリプト実行方法
Linuxでの起動時にシェルスクリプトを実行する方法
init.dを使用する
- 手順:
- シェルスクリプトを作成し、実行可能にする (
chmod +x script.sh
) /etc/init.d
ディレクトリにスクリプトを配置する- スクリプトに適切なヘッダー (サービス名、説明、依存関係など) を追加する
/etc/rc.local
または適切なランレベルのスクリプトファイルにスクリプトを登録する
- シェルスクリプトを作成し、実行可能にする (
- 伝統的な方法:システムブート時に実行されるサービスを管理する。
systemdを使用する
- 手順:
systemd
サービスファイルを作成する (通常は/etc/systemd/system/script.service
)- サービスファイルにスクリプトのパス、実行ユーザー、依存関係などを指定する
- サービスファイルを有効化 (
systemctl enable script.service
)
- 現代的な方法:システムブート時のサービス管理の標準的な手法。
cronを使用する
- 手順:
crontab
ファイルを編集する (通常はcrontab -e
)- スクリプトを実行するタイミングを指定する(例えば、毎分実行:
* * * * * /path/to/script.sh
)
- 定期的な実行:特定の時間間隔でスクリプトを実行する。
node.jsアプリケーションの場合
- 手順:
pm2
をインストールするpm2 start script.js
でアプリケーションを起動するpm2 save
で起動状態を保存する
pm2
を使用する:node.js
アプリケーションのプロセス管理ツール。
- Xウィンドウマネージャーの起動スクリプト:デスクトップ環境の起動時に実行される。
- ログインシェルスクリプト:ユーザーがログインする際に実行される。
注意
- スクリプトのエラー処理やログ出力を実装することを推奨します。
- セキュリティ上の理由から、スクリプトの権限や実行ユーザーを適切に設定してください。
- 特定のディストリビューションやシステム構成によっては手順が異なる場合があります。
Linux起動時スクリプト実行の具体的なコード例
# /etc/init.d/myscript
#!/bin/bash
#
# Description: My custom script
#
### BEGIN INIT INFO
# Provides: myscript
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-D escription: Starts myscript
### END INIT INFO
start() {
echo "Starting myscript"
/path/to/your/script.sh
}
stop() {
echo "Stopping myscript"
# 停止処理があれば記述
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload|force-reload)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart|reload|force-reload}"
exit 1
;;
esac
exit 0
- ポイント
- ヘッダー部分でサービスに関する情報を記述
start
関数でスクリプトを実行stop
関数で停止処理を記述update-rc.d myscript defaults
でランレベルの設定
# /etc/systemd/system/myscript.service
[Unit]
Description=My custom script
After=network.target
[Service]
Type=simple
User=youruser
ExecStart=/path/to/your/script.sh
[Install]
WantedBy=multi-user.target
- ポイント
[Unit]
セクションでサービスに関する情報を記述[Service]
セクションで実行ユーザーと実行コマンドを指定systemctl daemon-reload
で設定を反映systemctl enable myscript.service
で有効化
cron を使った例
# crontab -e
# 毎分実行する場合
* * * * * /path/to/your/script.sh
- ポイント
- crontab の書式に従って実行時間を指定
- 分 時 日 月 曜日 の順で記述
node.js と pm2 を使った例
# npm install -g pm2
# アプリケーション起動
pm2 start script.js
# 起動状態の保存
pm2 save
- ポイント
pm2
でnode.js
アプリケーションを管理pm2 save
で再起動時に自動起動するように設定
- ログ
ログを出力して、スクリプトの実行状況を監視する。 - エラー処理
スクリプトのエラー処理を適切に行う。 - 実行ユーザー
スクリプトを実行するユーザーを指定する。 - スクリプトのパス
スクリプトの絶対パスを指定するか、環境変数を使って相対パスで指定する。
選択のポイント
- pm2
node.js
アプリケーションの管理に特化している。 - cron
定期的な実行に適している。 - systemd
現代的な方法で、より柔軟な設定が可能。 - init.d
伝統的な方法だが、systemd
に置き換えられている。
注意
- セキュリティ上の観点から、スクリプトの内容を慎重に確認し、必要に応じて権限を制限してください。
Linux起動時スクリプト実行の代替方法
先ほどご紹介したinit.d
, systemd
, cron
, pm2
に加え、Linuxの起動時にシェルスクリプトを実行する方法は他にもいくつかあります。それぞれの特徴やユースケースに合わせて使い分けることで、より柔軟なシステム構築が可能になります。
ログインシェルスクリプト
- 用途
ユーザー固有の設定や環境変数の設定など。 - 場所
ユーザーのホームディレクトリ内の.bashrc
や.bash_profile
など。 - 特徴
特定のユーザーがログインする際に実行される。
# .bashrc
# ログイン時に実行される
echo "Hello, world!"
Xウィンドウマネージャーの起動スクリプト
- 用途
デスクトップ環境の初期化、アイコンの配置、アプリケーションの自動起動など。 - 場所
ウィンドウマネージャーの設定ファイルや、デスクトップ環境固有のスクリプト。 - 特徴
デスクトップ環境(X Window System)を起動する際に実行される。
# ~/.config/xfce/xfce4-session/autostart
# Xfce4の自動起動スクリプト
@/usr/bin/env xterm -e /path/to/your/script.sh
- 容器化技術
Docker、Kubernetesなどのコンテナ技術を利用して、コンテナ起動時にスクリプトを実行する。 - クラウドプラットフォームの起動スクリプト
AWS、GCP、Azureなどのクラウドプラットフォームでは、インスタンスの起動時に実行するスクリプトを指定できる。 - デーモンツール
daemontools
,supervisord
など、デーモンを管理するためのツール。
- 管理対象
- システム全体:
systemd
,init.d
- ユーザー単位: ログインシェルスクリプト
- 特定のアプリケーション:
pm2
, デーモンツール
- システム全体:
- 実行頻度
- 一回のみ: システム起動時
- 定期的に:
cron
- イベントトリガー: デーモンツール
- 実行タイミング
- 特定のイベント発生時: デーモンツール、クラウドプラットフォームの起動スクリプト
Linuxの起動時にシェルスクリプトを実行する方法には、様々な選択肢があります。どの方法を選ぶかは、実行したい処理の内容、実行タイミング、管理のしやすさなどを総合的に考慮して決定する必要があります。
より詳しく知りたい場合
- クラウドプラットフォーム
各プラットフォームのドキュメント - デーモンツール
各ツールのマニュアル、設定ファイルの書き方 - cron
crontabの書式、crontab.guruなどのオンラインツール - systemd
systemctl
コマンド、サービスファイルの書式
- ログ
スクリプトの実行状況をログに出力することで、トラブルシューティングに役立ちます。 - エラー処理
スクリプトのエラー処理を適切に行い、問題が発生した場合に迅速に対応できるようにしておきましょう。 - セキュリティ
スクリプトの実行にはセキュリティリスクが伴うため、実行するスクリプトの内容や権限を慎重に検討する必要があります。
linux node.js init.d