在使用 Linux 系统时,我们通常首选 crontab 来安排作业。 命令还有另一个实用程序对于调度一次性任务非常有用。 它从标准输入或脚本/文件中读取命令,稍后可以执行一次。 但是我们不能将 at 命令用于任何重复性任务。 对于重复性任务,请使用 Linux crontab。
Linux crontab
Linux 系统包有一个名为 crontab 的有用的任务调度程序。 Crontab 很受欢迎,因为它可以安排为以 root 身份运行自动化进程。 因此,以 root 身份运行自动化进程可以更轻松地进行系统更改。 您只需要更改任务,然后等待任务重新启动即可。
cron 作业的命令存储在 Linux 系统上的 crontab 文件中,该文件通常位于 /etc/crontab 中。使用 crontab -l 显示 crontab 文件的内容。使用 crontab -e 编辑 crontab 文件等等。
Linux的crontab有六个字段。 前五个字段定义了执行的时间和日期,第 6 个字段用于命令执行。
Linux at命令
at 是一个命令行实用程序,可安排在特定时间执行的命令。 用 at 创建的作业只执行一次。
如何使用 at 命令
at 命令的简化语法如下:
at 交互式
at 命令将您想要执行作业的日期和时间(运行时)作为命令行参数,并从标准输入中执行要执行的命令。
在即将到来的上午 11:00 安排任务:
退出交互式提示并按 Ctrl + d 保存计划的作业。使用 Ctrl + c 取消作业。
安排任务在 1 小时后执行:
at now + 1 hour
安排任务在 30 分钟后执行:
at now + 30 minutes
在即将到来的周日上午 11:00 安排任务:
at 10:00 AM Sun
在即将到来的 5 月 10 日上午 11:00 安排任务。
at 10:00 AM May 10
在 2022 年 5 月 22 日上午 11:00 安排任务:
at 11:00 AM 5/22/2022
在下个月的同一天上午 11:00 安排任:
at 11:00 AM next month
明天上午 11:00 安排任务:
at 11:00 AM tomorrow
可以使用 echo 并将命令传送到 at,不必使用 at 交互式提示符来安排任务。
echo 命令传送到at
以下命令将在早上 11:00 运行 backup.sh 脚本。
echo “sh test.sh” | at 11:00 AM
使用 atq 列出计划的作业
当我们使用 atq 按 root 帐户列出作业时,它会在结果中显示所有用户的作业。 但是,如果我们从非 root 帐户执行它,它将只显示该用户的作业。
字段说明:
首次提交:工作 ID
第二档:作业执行日期
第三场:作业执行时间
最后一个字段:用户名,计划在哪个作业下。
使用 atrm 删除计划作业
您可以使用 atrm 及其作业 ID 删除任何作业。
Linux at 命令C/C++实现
int main(int argc, char **argv, char **envp)
{
/*-------------------------------------------------------------------------*
* check arguments & pipe to "pwd" *
*-------------------------------------------------------------------------*/
if (argc < 2 || argc > 5)
{
fprintf(stderr, "Usage: %s time [month day] [file]\n", argv[0]);
exit(1);
}
if ((ltim = getltim(argv[1])) == -1)
{
fprintf(stderr, "%s: wrong time specification\n", argv[0]);
exit(1);
}
if ((argc == 4 || argc == 5) && (lday = getlday(argv[2], argv[3])) == -1)
{
fprintf(stderr, "%s: wrong date specification\n", argv[0]);
exit(1);
}
if ((argc == 3 || argc == 5) && open(argv[argc - 1], O_RDONLY) == -1)
{
fprintf(stderr, "%s: cannot find: %s\n", argv[0], argv[argc - 1]);
exit(1);
}
if (getcwd(pwd, sizeof(pwd)) == NULL)
{
fprintf(stderr, "%s: cannot determine current directory: %s\n",
argv[0], strerror(errno));
exit(1);
}
/*-------------------------------------------------------------------------*
* 确定执行时间并创建“at”工作文件 *
*-------------------------------------------------------------------------*/
time(&clk);
p = localtime(&clk);
year = p->tm_year;
if (lday == NODAY)
{
lday = p->tm_yday;
if (ltim <= (p->tm_hour * 100 + p->tm_min))
{
lday++;
if ((lday == MAXDAYNR && (year % 4)) || lday == MAXDAYNR + 1)
{
lday = STARTDAY;
year++;
}
}
}
...
}
总结
at命令用于在指定时间执行命令,有时你需要定期或以预定的时间间隔执行任务,cron 任务用于“自动执行的任务”,它有助于简化重复的、有时是乏味的任务的执行。
欢迎关注微信公众号【程序猿编码】,需要at 命令完整源码的添加本人微信号(c17865354792)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)