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

The*_*ato 1 ubuntu

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

Sté*_*las 11

作为普通用户,运行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
Run Code Online (Sandbox Code Playgroud)

对于每天 12:00(中午)运行的命令。

如果您是机器的管理员,则可以改为创建:

/etc/cron.d/myservice
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

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


Kus*_*nda 9

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

day=$( date +%e )
Run Code Online (Sandbox Code Playgroud)

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

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

把它变成一个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
)
Run Code Online (Sandbox Code Playgroud)

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

run_command
Run Code Online (Sandbox Code Playgroud)