Linux起動時スクリプト実行方法

2024-08-21

Linuxでの起動時にシェルスクリプトを実行する方法

init.dを使用する

  • 手順
    1. シェルスクリプトを作成し、実行可能にする (chmod +x script.sh)
    2. /etc/init.d ディレクトリにスクリプトを配置する
    3. スクリプトに適切なヘッダー (サービス名、説明、依存関係など) を追加する
    4. /etc/rc.local または適切なランレベルのスクリプトファイルにスクリプトを登録する
  • 伝統的な方法:システムブート時に実行されるサービスを管理する。

systemdを使用する

  • 手順
    1. systemdサービスファイルを作成する (通常は /etc/systemd/system/script.service)
    2. サービスファイルにスクリプトのパス、実行ユーザー、依存関係などを指定する
    3. サービスファイルを有効化 (systemctl enable script.service)
  • 現代的な方法:システムブート時のサービス管理の標準的な手法。

cronを使用する

  • 手順
    1. crontab ファイルを編集する (通常は crontab -e)
    2. スクリプトを実行するタイミングを指定する(例えば、毎分実行:* * * * * /path/to/script.sh
  • 定期的な実行:特定の時間間隔でスクリプトを実行する。

node.jsアプリケーションの場合

  • 手順
    1. pm2をインストールする
    2. pm2 start script.js でアプリケーションを起動する
    3. 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
  • ポイント
    • pm2node.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



Node.js入門ガイド

Node. jsは、サーバーサイドのJavaScript実行環境です。つまり、JavaScriptを使ってウェブサーバーやネットワークアプリケーションを開発することができます。Node. js公式サイトからインストーラーをダウンロードします。...


Node.jsのマルチコア活用

Node. jsは、イベント駆動型の非同期I/Oモデルを採用しているため、一般的にシングルスレッドで動作します。これは、CPUの処理能力を最大限に活用するために、ブロックする操作(例えば、ファイルI/Oやネットワーク通信)を非同期的に処理するからです。...


Node.js ファイル書き込み解説

Node. js は、JavaScript をサーバーサイドで実行するためのプラットフォームです。ファイルシステムへのアクセスも可能で、その中でもファイルにデータを書き込む機能は非常に重要です。const fs = require('fs');...


Node.jsでディレクトリ内のファイル一覧を取得する

Node. jsでは、fsモジュールを使用してディレクトリ内のファイル一覧を取得することができます。readdirメソッドは、指定されたディレクトリ内のファイル名とサブディレクトリ名を同期的にまたは非同期的に取得します。同期的な使用注意lstatメソッドはシンボリックリンクのターゲットファイルの情報を取得します。実際のファイルの情報を取得するには、statメソッドを使用します。...


Node.js スタックトレース出力方法

Node. jsでは、エラーが発生した場合にそのエラーのスタックトレースを出力することができます。スタックトレースは、エラーが発生した場所やその原因を特定する上で非常に役立ちます。最も一般的な方法は、エラーオブジェクトの stack プロパティを使用することです。これは、エラーが発生した場所やその呼び出し履歴を文字列として返します。...



SQL SQL SQL SQL Amazon で見る



Node.jsテンプレートエンジンについて

JavaScriptでプログラミングする際、テンプレートエンジンを使用することで、HTMLファイルや他のテキストベースのファイルに動的なコンテンツを埋め込むことができます。Node. jsには、様々なテンプレートエンジンが利用可能です。代表的なテンプレートエンジンには、EJS、Handlebars、Pug(Jade)などがあります。これらのエンジンは、それぞれ異なる構文や機能を持っていますが、基本的には、テンプレートファイルにHTMLの構造を定義し、JavaScriptのコードを使用して動的なデータを埋め込むことができます。


Node.jsでjQueryを使う?

一般的に、jQueryをNode. jsで直接使用することは推奨されません。Node. jsはサーバーサイドでのJavaScript実行を想定しており、ブラウザ環境向けのjQueryの機能は直接利用できないからです。詳細な解説Node. js サーバーサイドでJavaScriptを実行するためのプラットフォームです。ブラウザ環境とは異なり、DOMやブラウザのAPIは直接利用できません。


Node.js の基礎解説

Node. jsは、JavaScriptをサーバーサイドで実行するためのプラットフォームです。つまり、従来ブラウザ上でしか実行できなかったJavaScriptを、サーバー上で実行できるようにする環境を提供します。Node. js JavaScriptを実行するための環境であり、サーバー上で動作します。


Node.js デバッグ入門

Node. js アプリケーションのデバッグは、JavaScript コードのエラーや問題を特定し、解決するためのプロセスです。以下に、一般的なデバッグ手法を日本語で説明します。これを活用して、コードの実行フローを追跡し、問題が発生している箇所を特定します。


Node.js ファイル自動リロード

Node. jsでファイルを自動リロードする方法について、日本語で説明します。最も一般的な方法は、Node. jsのモジュールを使用することです。代表的なモジュールは以下の通りです。supervisor nodemonと同様に、ファイルの変更を検知してプロセスを再起動します。