はじめに
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/java
はwhich 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
User
とGroup
は実行させたいユーザー名に書き換えてください。
ステップ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バックエンドなど、さまざまな用途で活用できます。