我需要想出一个命令,以便在不平坦的日子里执行不同的命令。
答案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/.bashrc
for bash
),然后您可以使用
run_command