如何设置每天下午4点定时运行Java程序
首先把你给出的代码保存为Simple.java,执行javac Simple.java编译得到Simple.class文件,先在本地执行java Simple确认可以正常输出Hello Java,再按你用的操作系统选择对应的定时方案:
Windows 系统:使用任务计划程序
- 搜索打开「任务计划程序」,点击右侧菜单的「创建基本任务」
- 自定义任务名称后进入下一步,触发器选择「每天」,设置触发时间为16:00
- 操作项选择「启动程序」,程序或脚本栏填写Java安装目录下bin文件夹里的
java.exe绝对路径(比如C:\Program Files\Java\jdk1.8.0_301\bin\java.exe),添加参数栏填写-cp "你的Simple.class所在文件夹的绝对路径" Simple - 确认所有配置后保存任务即可
Linux/macOS 系统:使用crontab定时任务
- 终端执行
crontab -e进入定时任务编辑页 - 新增一行配置:
0 16 * * * 你的java可执行文件绝对路径 -cp 你的Simple.class所在文件夹绝对路径 Simple- java路径可以通过终端执行
which java查询到,避免环境变量不生效导致执行失败
- java路径可以通过终端执行
- 保存退出后crontab会自动加载新的定时规则
纯Java内置定时方案
如果不想依赖系统的定时工具,可以直接用Java自带的调度能力实现内置定时,示例代码如下:
import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.time.LocalTime; import java.time.Duration; public class AutoRunTask { public static void main(String[] args) { ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); // 配置目标执行时间为每天16点 LocalTime targetTime = LocalTime.of(16, 0); LocalTime now = LocalTime.now(); // 计算首次执行的延迟时间 long initialDelay = Duration.between(now, targetTime).getSeconds(); // 如果当前时间已经过了16点,就从次日16点开始执行 if (initialDelay < 0) { initialDelay += Duration.ofDays(1).getSeconds(); } // 执行周期为24小时 long period = Duration.ofDays(1).getSeconds(); scheduler.scheduleAtFixedRate(() -> { // 这里放入你需要执行的业务逻辑 System.out.println("Hello Java"); }, initialDelay, period, TimeUnit.SECONDS); } }
运行这个代码后程序会常驻后台,到点自动执行对应逻辑。
常见排查点
- 所有路径都建议填绝对路径,避免环境变量、工作目录不一致导致执行失败
- Linux系统可以查看
/var/log/cron日志排查crontab执行报错 - Windows系统可以在任务计划程序的任务历史面板查看执行错误信息
内容的提问来源于stack exchange,提问作者Ghulam Azam Khan
相关产品推荐
相关产品推荐

