创建文件 vi /etc/systemd/system/timer.service
[Unit]
# 描述
Description=定时任务
# 表示该服务在网络和数据库启动完成后再启动
After=network.target mysqld.service
[Service]
#simple 主进程直接运行(不 fork) systemd 认为 ExecStart 启动的进程就是服务本身。
#forking 传统守护进程(启动时 fork 子进程,父进程退出) systemd 会等待父进程退出,然后认为服务已启动,并跟踪子进程。需配合 PIDFile= 使用更可靠。
#oneshot 一次性任务(执行完就结束) 常用于初始化脚本。必须设置 RemainAfterExit=yes 才能保持“active”状态。
#notify 支持 sd_notify 的服务(如新版本的 Redis、Nginx 等) 服务启动后会通过 sd_notify("READY=1") 通知 systemd “我准备好了”。最精准的启动完成信号。
#dbus 通过 D-Bus 提供服务 当服务在 D-Bus 上注册指定名称后,systemd 才认为启动成功。
#idle 延迟启动(很少用) 等待所有任务完成后再执行 ExecStart,主要用于避免控制台输出混乱。
Type=simple
# 以哪个用户身份运行 最好别用root
User=root
# 启动前切换到的工作目录
WorkingDirectory=/home/pro/timer/
# 实际启动命令:执行你的 shell 脚本
ExecStart=/usr/local/jdk1.8.0_361/bin/java -jar timer.jar
# 如果进程异常退出(非 0 退出码),自动重启
Restart=on-failure
# 重启前等待 10 秒,避免频繁崩溃导致系统负载过高
RestartSec=10
# 标准输出和错误输出都交给journal记录,null不启用
StandardOutput=null
StandardError=null
[Install]
# 表示当系统进入多用户模式(即正常开机)时,自动启动此服务
WantedBy=multi-user.target如果文件写错了,修改后记得重载配置
systemctl daemon-reload