V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Hyponet
V2EX  ›  Java

定时任务经常挂怎么办

  •  
  •   Hyponet ·
    Hyponet · Dec 4, 2015 · 5899 views
    This topic created in 3809 days ago, the information mentioned may be changed or developed.

    最近写了一个 TODO ,正准备作为学期末 Java 的大作业,但不想以作业的要求写东西,便打算提高下实用性自给自足改善下生活习惯_(:з」∠)_。

    所以,作为一个合格的 TODO ,应该有一个事件提醒功能,经搜索我就发现 Java 里有个 timertask ,可以作为定时任务,便用这个写了一个每天 6 点检查所有事件并发邮件提醒。

    不过 timertask 好像十分不靠谱,经常没有反应了,因为并不知道这个东西到底有没有在跑,所以便到了 6 点执行完事件检查后给我发封邮件,如果没有发送邮件的话我会去重启下程序

    http://ww3.sinaimg.cn/mw690/6ad13735jw1eygqpssoetj20u01hcwrn.jpg

    每天重启 3 天后我决定弃坑,改用了 quartz ,这个广受好评的开源计时器,然后我第二天 6 点果然收到了事件检查完成的提示邮件,灰常高兴,以为从此离坑走上正轨。

    不过两天后,邮件又没了,然后我只好去重启服务器,第二天,还是没有邮件,知道现在,毛音信都没有,都无力吐槽了。

    我现在实在很疑惑,到底什么算是计时器的正确使用姿势,计时器经常挂咋办?

    28 replies    2019-08-23 09:40:18 +08:00
    TangMonk
        1
    TangMonk  
       Dec 4, 2015
    crontab 不行吗
    skydiver
        2
    skydiver  
       Dec 4, 2015
    @TangMonk 233333
    skydiver
        3
    skydiver  
       Dec 4, 2015
    @TangMonk 因为 Java 程序员眼里 Java 是万能的,不需要别的东西
    letitbesqzr
        4
    letitbesqzr  
       Dec 4, 2015
    公司的 quartz 服务 跑了大半年了...都没遇到过问题... 你都定时处理什么任务了?
    odirus
        5
    odirus  
       Dec 4, 2015
    你看一下你的程序为啥异常退出哇。 crontab 非常不错,而且日志也很详细,没必要重复发明轮子。
    HentaiMew
        6
    HentaiMew  
       Dec 4, 2015
    你至少要能确定它是执行了但是中途失败了,还是没执行... 还有定时的表达式是什么,贴出来看看
    Hyponet
        7
    Hyponet  
    OP
       Dec 4, 2015
    @TangMonk 额,还真没考虑到用系统的命令来作为计时器,不过像这种情况,在实际开发中什么才算是常规思路?还在读大学感觉自己写的东西太理想化了,并不明白实际开发中的正确姿势。是不是就算把提醒功能分离出来,用 crontab 来调用一个脚本来执行?

    @skydiver :-D 还好我没有语言信仰_(:з」∠)_
    longaiwp
        8
    longaiwp  
       Dec 4, 2015
    @skydiver jawa 当然是万能的!
    Hyponet
        9
    Hyponet  
    OP
       Dec 4, 2015
    @letitbesqzr 就是检查所有事件,满足条件后调用 javax.mail 发邮件( SUN 的包),其实 quartz 中的 job 并没有直接发邮件,而是 new 了一个线程专门用来发邮件。在用 timertask 倒是会遇到包括网络超时在内的各种问题都会导致定时任务中断,但 quartz 好像没有这么一说,也是很奇怪

    @odirus 之前没有考虑到这种实现,回宿舍研究下

    @HentaiMew 突然想到居然没有执行日志, 2333 ,只是在所有事件检查完发个邮件提醒。因为是每天六点执行,表达式是"0 0 6 * * ?"
    letitbesqzr
        10
    letitbesqzr  
       Dec 4, 2015
    @skydiver 反正比 php 好!
    HentaiMew
        11
    HentaiMew  
       Dec 4, 2015
    @HypoChen 不知道你是在什么平台上运行的... 是不是被自动休眠了,例如 SAE 这样的 PaaS 。。。。
    iminto
        12
    iminto  
       Dec 4, 2015
    谁现在还用 timertask 这个啊,早过时了。用 ScheduledExecutorService
    iminto
        13
    iminto  
       Dec 4, 2015
    @skydiver 因为 crontab 不行,太粗糙
    raysmond
        14
    raysmond  
       Dec 4, 2015
    crontab 谁说不行? crontab 里面可以执行其他命令啊,我经常执行 bash, ruby, python 的脚本。非要用 java 的话, cron 任务里执行一个你的 java 程序不就行了?
    cch123
        15
    cch123  
       Dec 4, 2015 via iPad
    这个帖子怎么这么欢乐,在 crontab 里执行什么程序都可以
    Ouyangan
        16
    Ouyangan  
       Dec 4, 2015
    ScheduledExecutorService 我给满分
    ooTwToo
        17
    ooTwToo  
       Dec 4, 2015
    ScheduledExecutorService 可以的
    ryd994
        18
    ryd994  
       Dec 5, 2015 via Android
    @HypoChen 0 6 * * * 分时日月星
    另外程序不需要管发邮件的事情,设置好 crond , crond 会把程序输出直接发邮件。(所以不需要的部分 >/dev/null 很重要)
    Hyponet
        19
    Hyponet  
    OP
       Dec 5, 2015
    @iminto @Ouyangan @ooTwToo 我还不知道还有这么一种东西,又有需要 get 的技能了,谢谢

    @ryd994 是不是可以把发邮件这个任务分离给脚本之类的,用 crontab 来定期执行就可以了?
    ryd994
        20
    ryd994  
       Dec 5, 2015 via Android
    @HypoChen NO 是把程序本身的逻辑做成脚本(判断事件,判断复杂条件之类的)结果直接 echo 。 crond 会捕捉一切输出,如果有任何输出,就会安装配置发一封邮件。你先查怎么让 cron 发邮件到你的邮箱,然后自己试一下就明白了
    honam
        21
    honam  
       Dec 7, 2015
    你都不看一下日志为啥挂
    tryfinally
        22
    tryfinally  
       Dec 9, 2015
    crontab 任务失败怎么自动恢复?
    SparkMan
        23
    SparkMan  
       Dec 22, 2015
    @TangMonk
    @skydiver 这根语言有毛关系?跟框架有什么关系?程序出异常了,都不看日志吗?都不看走到哪一步了嘛?
    skydiver
        24
    skydiver  
       Dec 22, 2015
    @SparkMan 爱特我干嘛,挖坟有意思么?调侃一样就触发你神经了?
    TangMonk
        25
    TangMonk  
       Dec 22, 2015
    @HypoChen 一般要求不高的简单任务(不需要任务失败自动恢复什么的),用 crontab 就够了。

    复杂点的,分布式神马的,就需要一些第三方的了
    TangMonk
        26
    TangMonk  
       Dec 22, 2015
    @SparkMan 息怒息怒
    ooTwToo
        27
    ooTwToo  
       Jan 4, 2016
    楼主这个开源了么 我想看看。
    win7pro
        28
    win7pro  
       Aug 23, 2019
    提醒用喵提醒,直接 http 跨平台
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1770 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 16:23 · PVG 00:23 · LAX 09:23 · JFK 12:23
    ♥ Do have faith in what you're doing.