我想每天(仅在周末)运行一次脚本,但是,我不能为此使用cron作业。

我正在考虑进行一个无限的while循环, sleep 24小时,检查是否是周末,是否执行脚本。

在Linux上的bash下,这是一个好的解决方案吗?

我当前的实现:

#! /bin/bash

 while [ true ]; do
    if [[ $(date +%u) -lt 6 ]]; then
               ./program
        else
             echo Today is a weekend, processing is skipped. Back to sleep.
    fi
    sleep  86400
done

我将在下午5点启动此脚本。

最佳答案

在没有每个用户的crontab的那天,我经常使用at(1)来完成此任务。

#!/bin/sh
... do stuff...
at -f /path/to/me 5pm tomorrow

这样,您的脚本将运行并为下一次调用安排自己的时间。

我认为您不能指定“下一个周末”的时间规范,因此,如果不是周末,则只需要每天重新安排时间并退出脚本(在安排下一个工作时间后)。

编辑:或者,而不是每天安排,而是找出今天是什么并适当安排。例如
day=Saturday
if [ $(date +%u) -eq 6 ] ; then day=Sunday ; fi
at -f /path/to/me 5pm next $day

如果此脚本在周六运行,则将下一次运行安排在下周日,否则将在下周六运行。 [ $(date +%A) = Saturday ]可能更具可读性,但是%A将提供特定于语言环境的字符串,因此如果您更改语言环境,则可能无法正常工作。

关于perl - 如何模拟Cron作业,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3533253/

10-10 13:19