前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ubuntu设置定时任务的三种方法

ubuntu设置定时任务的三种方法

作者头像
你好戴先生
发布2020-09-02 10:19:09
15.4K0
发布2020-09-02 10:19:09
举报
文章被收录于专栏:戴言泛滥

老子曰:天道轮回。谁,都是一个定时的轮回

01

corn

cron,是一个Linux定时执行工具,可以在无需人工干预的情况下运行作业。

1、添加定时任务

推荐使用crontab -e命令添加自定义的任务

参数说明

m h dom mon dow command

m 分钟 0-59

h 小时 0-23

dow 天1-31

mon 月 1-12

dow 星期 1-6 0表示星期天

command 就是要执行的命令

除了这些固定值外,还可以配合星号(*),逗号(,),和斜线(/)来表示一些其他的含义:

  • 星号 表示任意值,比如在小时部分填写 * 代表任意小时(每小时)
  • 逗号 可以允许在一个部分中填写多个值,比如在分钟部分填写 1,3 表示一分钟或三分钟
  • 斜线 一般配合 * 使用,代表每隔多长时间,比如在小时部分填写 */2 代表每隔两分钟。所以 */1 和 * 没有区别

1. \* * * * * date >> /home/postgres/time.log # 每隔一分钟执行一次任务

2. 0 * * * * date >> /home/postgres/time.log # 每小时的0点执行一次任务,比如6:00,10:00

3. 6,10 * 2 * * date >> /home/postgres/time.log # 每个月2号,每小时的6分和10分执行一次任务

4. \*/3,\*/5 * * * * date >> /home/postgres/time.log # 每隔3分钟或5分钟执行一次任务,比如10:03,10:05,10:06

2、重启cron服务

代码语言:javascript
复制
service cron restart

02

nohup命令

编写java程序,编写一个主函数,在主函数里边写入一下代码

代码语言:javascript
复制
     public static void main(String[] args) throws Exception {

        // 一天的毫秒数
        long daySpan = 24 * 60 * 60 * 1000;

        // 规定的每天时间15:33:30运行
        //        final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 15:33:30");
        final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 02:00:00");
        // 首次运行时间
        Date startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf.format(new Date()));

        // 如果今天的已经过了 首次运行时间就改为明天
        if (System.currentTimeMillis() > startTime.getTime()) {
            startTime = new Date(startTime.getTime() + daySpan);
        }
        ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,
                new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());
        long initialDelay=1000L;
        long period = 100L;
        executorService.scheduleAtFixedRate(() -> {
            //do something


            //delay--这是以毫秒为单位的延迟之前的任务执行。
            //period--这是在连续执行任务之间的毫秒的时间
        },initialDelay,period, TimeUnit.HOURS);

    }

生成jar包,并上传到服务器的某路径

执行如下命令

代码语言:javascript
复制
java -jar XXX.jar &

当前窗口不被锁定,输出的日志会显示在屏幕上,当关闭窗口的时候,停止执行。

nohup 不挂断运行的命令,当终端或者账户关闭的时候,程序依旧运行。

当前的命令默认会把日志输出到nohup.out文件中,执行如下命令

代码语言:javascript
复制
nohup java -jar XXX.jar &

指定输出文件,执行如下命令

代码语言:javascript
复制
nohup java -jar XXX.jar >log.out &

查看后台启动命令是

代码语言:javascript
复制
jobs

但是它只能查看当前连接中断的后台命令,当关闭终端再次打开的时候可以执行如下命令查看

代码语言:javascript
复制
ps -ef

03

screen

还有一种更加强大的方式是使用screen,首先创建一个断开模式的虚拟终端,然后用-r选项重新连接这个虚拟终端,在其中执行的任何命令,都能达到nohup的效果,这在有多个命令需要在后台连续执行的时候比较方便:

1、安装命令

代码语言:javascript
复制
apt-get install screen

2、常用命令

创建screen会话

代码语言:javascript
复制
screen java -jar start.jar

或者

代码语言:javascript
复制
screen

离开screen,但是保留里面的程序操作是

Ctrl+a d

恢复会话

先查看当前screen里的会话 screen -ls

screen -r (进程名或进程号) :实际执行命令时是没有括号的,这里只是为了说明

关闭会话

Ctrl+c或者exit

常用快捷键

Ctrl+a c :在当前screen会话中创建窗口

Ctrl+a w :窗口列表

Ctrl+a n :下一个窗口

Ctrl+a p :上一个窗口

Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换

screen启动会话时如果是直接执行 screen java -jar start.jar 会有两个进程在跑,解决办法是

先执行screen,在会话窗口里面再执行你要的程序或任务

文/戴先生@2017年10月11日

---end---


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 你好戴先生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档