将在不均匀的日子执行不同命令的命令

将在不均匀的日子执行不同命令的命令

我需要想出一个命令,以便在不平坦的日子里执行不同的命令。

答案1

作为普通用户,运行crontab -e编辑你的crontab。在该 crontab 中输入:

00 12 1-31/2 * * /path/to/the/command_for_odd_days
00 12 2-30/2 * * /path/to/the/command_for_even_days

这些命令在每天 12:00(中午)运行。

如果您是计算机的管理员,您可以创建:

/etc/cron.d/myservice

文件,具有类似的内容,只不过您需要指定命令应以哪个用户身份运行。

00 12 1-31/2 * * someuser /path/to/the/command_for_odd_days
00 12 2-30/2 * * someuser /path/to/the/command_for_even_days

运行man 5 crontab以了解有关这些 crontab 格式的更多信息。

1-31/2 语法(1 到 31 之间的天,每两天)应该被大多数现代 cron 实现所识别,包括 Ubuntu 系统上所有可用的 cron 实现。如果您遇到不支持的古老系统,您可以将其替换为1,3,5,7,...,29,31.

答案2

%e该实用程序的格式说明符date将以 1 到 31 之间的整数形式给出月份中的某一天(第 1 到 9 天有一个前导空格,但在算术扩展中使用时这是无害的):

day=$( date +%e )

要测试这个数字是奇数还是偶数:

if [ "$(( day % 2 ))" -eq 0 ]; then
    # $day is even
else
    # $day is odd
fi

将其转换为 shell 函数:

run_command () (
    day=$( date +%e )

    if [ "$(( day % 2 ))" -eq 0 ]; then
        # $day is even
        some_command_on_even_days
    else
        # $day is odd
        other_command_on_odd_days
    fi
)

这将进入您的 shell 初始化文件(例如$HOME/.bashrcfor bash),然后您可以使用

run_command

相关内容