想让linux程序到一个时间点自动运行,比如说隔一段时间我想运行一个程序检测一下女朋友相册有没有新照片如果有发给我。 反正就是类似的功能,就可以使用at和cron。

linux定时任务

linux上定时任务分为两种一种是周期性执行的,一种是定时只执行一次的任务。

at

at用于只执行一次的任务,这个依赖于一个服务 atd并非所有的linux发型版这个服务都是自启动的,在设置启动任务之前可以先检查一下后台服务是否启动。

systemctl status atd 查看服务状态

systemctl enable atd 启动服务

at的运行方式

我们使用at命令来产生要运行的任务,并将这个任务以文本文件的方式写入/var/spool/at/目录内, 不同的linux可能会有所不同,笔者的系统是Ubuntu,路径是/var/spool/cron/atjobs ,该任务便能等待std这个服务的使用和运行了。

权限: 因为安全原因骇客可能用很多计时任务,那么at就会是重灾区了。所以需要对at进行权限管控,可以利用/etc/at.allow和/etc/at.deny这两个文件来实现对at的使用限制。

  1. 先寻找/etc/at.allow这个文件,只有些在at.allow这两个文件中的用户才能使用at,没用写在这个文件中的用户则不能使用at (即使没有写在at.deny)
  2. 如果/etc/at.allow不存在则会去寻找 /etc/at.deny这个文件,写在这文件中的用户不可以使用at,而没有在at.deny文件中的用户,就可以使用at。
  3. 如果两个人文件都不存在那么就只有root可以使用root命令。

一般的linux系统中系统一般都会留一个空的/etc/at.deny文件允许所有人都可以使用at

运行单一的计划任务

  1. at 16:00 2021-11-22 输入回车就可以输入要执行的命令了,默认为bash脚本的命令,然后这个命令会在后面的时刻进行运行。

  2. at now + 5 minutes 输入回车,也可以进行命令的编辑

  3. 在命令输入完成后可以使用 ctrl + d 结束任务的输入

at的选项与参数

-l 查看本机的任务列表

-c 查看任务详细内容

-v 使用明显的格式列出at计划中的任务列表

atrm 删除一个任务

在linux中还有一个命令 batch 这个命令和at类似不过更加智能一点,它可以判断当前cpu是不是忙碌,当cup负载小于0.8的时候才会去执行命令。

光说写命令不操作就是在耍流氓,下面我们来实际操作一下:
在这里插入图片描述
创建了一个五分钟之后的任务, 可以看到上面命令可以写多条,通过这个shell你也可以调用起来你自己的程序,输入完成之后你可以通过 ctrl + d 然后就会自动保存,五分钟之后这个任务就会运行啦。

使用at -c 就可以看到你这个任务具体要执行的命令啦。要执行的命令在最下边,上面都是一堆配置shell的变量可以不用管。

我们快速的添加一个任务然后打开目录 /var/spool/cron/atjobs 这里使用root权限不然看不了。
在这里插入图片描述
可以看到都是可以执行的,cat一下发现和 at -c 看到的内容是一样的。
运行完之后这个文件就会被删除掉。

scron

cron这个单词的意思是 计时程序 的意思也就是说这个命令是专门用来周期性执行某些任务的。

设置

和at一样他也有自己的权限配置文件和自己的服务

/etc/cron.allow 将可以使用的账号加入其中,不在这个文件中的用户则不可以使用

/etc/cron.deny 在这里面用不了

服务名称 cron.service

crontab的选项与参数

-e 编辑crontab的内容

-l 查看crontab的内容

-r 删除所有的计划内容

当使用户crontab -e 进入到编辑界面后,输入要写入的任务就可以。

意义分钟小时日期月份命令
range0 ~ 590 ~ 231~311~120 ~7需要执行的命令

其中还可以使用特殊字符进行在细分, * , - /n 这四种字符每个都有自己的意义,具体意义就不详细写了,如果要精准配置的话可以看看《鸟哥私房菜》P507 。 每个用户加入的任务会被写/var/spool/cron/crontabs/userName这个文件下,内容实际上就是crontab -e编译的内容,/var/spool/cron/crontabs/这个目录所有者是root,并设置了粘制位,用户无法访问。

开始吧~~:

  1. 首先通过命令crontab -e 进行命令编辑然后写入下面的内容 */5 * * * * /home/lq/桌面/test.sh 这条命令代表每隔五分钟启动一下这个脚本。脚本也给大家,方便测试:
#! /bin/bash
while :
do      
	echo "my second shell" >> /home/lq/桌面/1233333.txt
        sleep 1
done

编辑的结果如下:

在这里插入图片描述
如果还想加任务,直接在这个文件下面再加一个就行了。 脚本的路径大家自己改一下。
编辑完成后wq保存退出就可以了, 然后就会每五分钟执行一下这个命令。
还有就是第一次进入的时候可能会让你选择编辑器,你选择vi就可以了。
保存完了实际上这个就放在了 /var/spool/cron/crontabs/lq下,使用root可以打开这个文件,看到的内容和编辑的内容是一样的。

cron.service 功能不止这么一点,linux下所有周期性的任务他都可以进行负责。

系统的配置文件

/etc/crontab 这个文件内容和/var/spool/cron/crontabs/userName文件内容差不多,如果要执行系统的例行任务时就可以修改这个文件。 cron服务检测限制是分钟,当编辑完**/etc/crontab*并保存后那么cron就会自动的执行起来。我们可以看一下这个文件长什么样子:
在这里插入图片描述
可以看到一共有四行, 每一行都是一个定时任务, 后面的用户名表示以谁的权限去执行。
/etc/cron.d/
如果你自己想写一个周期性的任务那么就可以把配置文件放到这个目录下,我们也可以看一下,瞄一眼什么都明白了哈哈。

补充一下执行的脚本一定要有执行权限, 不然就裂开
添加链接描述

在这里插入图片描述
上面就是wps的定时任务,如果小伙伴要写什么定时任务就可以放到这里哦~

/etc/cron.hourly , cron.daily/, cron.monthly/,cron.weekly/ 这些是子目录,这里面放的都是可执行文件,相当根据上面的日期,每隔一段时cron服务会将这些文件夹里的程序调用一次。可以看到里面都是可执行的脚本。
在这里插入图片描述
cron.service 会根据文件夹名称的不同周期性运行上面的程序。

大家现在应该已经了解 定时任务了把, 可以按照上面的内容操作一遍,肯定就能加深印象,good luck

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐