1.使用系统YUM源安装JAVA服务

sudo dnf install java -y 

2.编写一个简单的 Java 程序

首先,创建一个名为 TimestampPrinter.java的 Java 文件。这个程序会每隔 5 秒输出当前时间戳,方便观察服务是否在运行。

public class TimestampPrinter {
    public static void main(String[] args) {
        try {
            System.out.println("【时间戳服务】启动成功!");
            System.out.println("开始输出时间戳,按 Ctrl+C 停止...");
            
            int count = 0;
            while (true) {
                String timestamp = new java.util.Date().toString();
                System.out.println("[" + (++count) + "] 当前时间: " + timestamp);
                Thread.sleep(5000);
            }
        } catch (InterruptedException e) {
            System.out.println("服务被中断");
        } catch (Exception e) {
            System.err.println("发生错误: " + e.getMessage());
        } finally {
            System.out.println("服务已停止");
        }
    }
}

​​保存文件​​(例如保存到 /root/testjava/TimestampPrinter.java)。

3. 编译 Java 程序并打包

​​1.编译​​:使用 javac编译 Java 文件

javac TimestampPrinter.java

这会生成 TimestampPrinter.class文件。

2.​​打包为可执行 JAR​​(推荐,便于管理)

jar cfe TimestampPrinter.jar TimestampPrinter TimestampPrinter.class

此命令会生成 TimestampPrinter.jar,其中 e参数指定了主类。

3.​​测试运行​​

[root@localhost testjava]# ls
TimestampPrinter.class  TimestampPrinter.jar  TimestampPrinter.java
[root@localhost testjava]# java -jar TimestampPrinter.jar
【时间戳服务】启动成功!
开始输出时间戳,按 Ctrl+C 停止...
[1] 当前时间: Mon Oct 20 11:35:40 CST 2025
[2] 当前时间: Mon Oct 20 11:35:45 CST 2025
[3] 当前时间: Mon Oct 20 11:35:50 CST 2025

如果控制台开始每隔 5 秒打印时间戳,说明程序正常。按 Ctrl + C停止测试。

4. 创建 Systemd 服务文件(实现开机自启)

这是实现开机自启的核心步骤。我们将创建一个 Systemd 服务单元文件来管理 Java 程序。

1.​​创建服务文件​​

sudo vi /etc/systemd/system/timerstamp-printer.service
[Unit]
Description=时间戳打印服务
After=network.target

[Service]
Type=simple
# 使用您实际的Java路径
ExecStart=/usr/bin/java -jar /root/testjava/TimestampPrinter.jar
# 指定工作目录
WorkingDirectory=/root/testjava
User=root
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

​​关键参数说明​​: Type=simple: 适用于直接在前台运行的程序(如我们的 Java 程序)。
Restart=on-failure: 服务异常退出时自动重启。 WantedBy=multi-user.target:
指定服务在系统多用户模式下启动。

​​2.重新加载并启动服务​​

sudo systemctl daemon-reload
sudo systemctl start timerstamp-printer.service

​​3.​​检查服务状态​​:

[root@localhost bin]# systemctl status timerstamp-printer.service 
● timerstamp-printer.service - 时间戳打印服务
     Loaded: loaded (/etc/systemd/system/timerstamp-printer.service; disabled; preset: disabled)
     Active: active (running) since Mon 2025-10-20 11:24:20 CST; 12s ago
 Invocation: d8fb852700e44764aa3f3d88781e3b72
   Main PID: 526348 (java)
      Tasks: 18 (limit: 100232)
     Memory: 32.7M (peak: 36.1M)
        CPU: 349ms
     CGroup: /system.slice/timerstamp-printer.service
             └─526348 /usr/bin/java -jar /root/testjava/TimestampPrinter.jar

1020 11:24:20 localhost.localdomain systemd[1]: Started timerstamp-printer.service - 时间戳打印服务.
1020 11:24:20 localhost.localdomain java[526348]: 【时间戳服务】启动成功!
1020 11:24:20 localhost.localdomain java[526348]: 开始输出时间戳,按 Ctrl+C 停止...
1020 11:24:20 localhost.localdomain java[526348]: [1] 当前时间: Mon Oct 20 11:24:20 CST 2025
1020 11:24:25 localhost.localdomain java[526348]: [2] 当前时间: Mon Oct 20 11:24:25 CST 2025
1020 11:24:30 localhost.localdomain java[526348]: [3] 当前时间: Mon Oct 20 11:24:30 CST 2025

​​4.设置开机自启

[root@localhost ~]# sudo systemctl enable timerstamp-printer.service
Created symlink '/etc/systemd/system/multi-user.target.wants/timerstamp-printer.service''/etc/systemd/system/timerstamp-printer.service'.
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐