JavaプログラムをLinux上で自動起動させる方法【systemd設定】

はじめに

Javaで作ったプログラムをLinuxの起動時に自動実行したい場面はよくあります。
本記事では、systemdを用いた自動起動サービス化の手順を、実例付きでわかりやすく解説します。

  • 使用環境:Ubuntu 20.04 / 22.04、CentOS 7 など
  • Javaアプリケーション:jarファイルを前提

ステップ1:Javaアプリ(.jar)を準備する

以下のような HelloApp.jar という自己完結型のJavaアプリがあるとします:

public class HelloApp {
  public static void main(String[] args) {
    System.out.println("アプリ起動中...");
    while (true) {
      try {
        Thread.sleep(5000);
        System.out.println("Hello from Java!");
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
}

このコードをコンパイルして、実行可能JARにしておきます。

java -jar HelloApp.jar

ステップ2:起動用スクリプトを作成

例:/opt/helloapp/start.sh

#!/bin/bash
cd /opt/helloapp
/usr/bin/java -jar HelloApp.jar >> /var/log/helloapp.log 2>&1
  • /usr/bin/javawhich java で確認
  • 実行権限を付与:
chmod +x /opt/helloapp/start.sh

ステップ3:systemdサービスファイルを作成

例:/etc/systemd/system/helloapp.service

[Unit]
Description=Java HelloApp Service
After=network.target

[Service]
ExecStart=/opt/helloapp/start.sh
WorkingDirectory=/opt/helloapp
Restart=always
User=ubuntu
Group=ubuntu

[Install]
WantedBy=multi-user.target

UserGroup は実行させたいユーザー名に書き換えてください。


ステップ4:systemdでサービスを起動・有効化

# デーモンにサービスファイルを認識させる
sudo systemctl daemon-reexec
sudo systemctl daemon-reload

# サービスを起動
sudo systemctl start helloapp

# サービスの状態を確認
sudo systemctl status helloapp

# 自動起動を有効化
sudo systemctl enable helloapp

ステップ5:ログ確認や再起動テスト

ログ確認(標準出力)

journalctl -u helloapp -f

再起動後もサービスが立ち上がるかを確認

sudo reboot

補足:サービス停止・無効化

# 停止
sudo systemctl stop helloapp

# 自動起動無効化
sudo systemctl disable helloapp

まとめ

Linux上でJavaアプリをsystemdで自動起動させることで、常駐サービスとしての運用が容易になります。
業務システム・バッチ処理・IoTバックエンドなど、さまざまな用途で活用できます。

タイトルとURLをコピーしました