Kumar Asked: 2010-02-05 00:27:44 +0800 CST2010-02-05 00:27:44 +0800 CST 2010-02-05 00:27:44 +0800 CST 在 Linux 启动时运行 shell 脚本,但每天只运行一次 772 在 linux 启动(启动)时运行 shell 脚本,但每天只运行一次,我该怎么做? 我正在使用 Redhat 企业版 linux 5 linux shell startup 5 个回答 Voted Best Answer Antoine Benkemoun 2010-02-05T00:46:42+08:002010-02-05T00:46:42+08:00 将您的脚本放在 init.d 中,以便它在启动时执行。 为了确保它每天只执行一次,您需要做的就是存储上一次执行的日期并将其与当前日期进行比较。这在任何脚本语言中都非常简单。 h4kuna 2017-04-06T10:33:30+08:002017-04-06T10:33:30+08:00 我用这个。下面的代码保存到可执行文件,命名为 depo,然后你在文件中读取注释。 #!/bin/bash # depo = day-execute-per-onetime = execute onetime per day # add argumets whose execute onetime per day # Example: ./depo "uname -a" # let's try run twotimes if [ $# = 0 ]; then echo "Missing arguments, add one or more commands what you want to execute. Like $ depo \"uname -a\" date"; exit; fi; TODAY=`date +%Y-%m-%d` HOME_DIR="$HOME/.depo/" COMMAND=`echo $@ | sha1sum | cut -d ' ' -f1` SYNC_FILE="$HOME_DIR/$COMMAND" mkdir -p "$HOME_DIR" touch "$SYNC_FILE" SYNC_DATE=`cat "$SYNC_FILE"` if [ "$SYNC_DATE" == "$TODAY" ]; then exit fi for arg; do eval $arg done echo $TODAY > "$SYNC_FILE" arunpereira 2010-02-05T00:48:45+08:002010-02-05T00:48:45+08:00 将其添加到 init.d。让脚本“触摸”一个小文件到它可以访问的目录,作为非特权用户的主目录(除非它需要其他权限)。不要使用 tmp,因为您无法保证该文件将持续存在。用进程的名称命名文件,查找它并检查它的最后修改时间。如果小于 86400 秒前,则退出,否则继续。在“触摸”文件之前进行检查,否则您将始终认为脚本在最后一天没有运行。 scyldinga 2010-02-05T02:00:01+08:002010-02-05T02:00:01+08:00 在 debian 系统上,我会将脚本放在 /etc/cron.daily 上,然后安装anacron。 Anacron可能是您正在寻找的工具。 不知道 RHEL 是否包含 rpm 或者您是否必须寻找它们甚至从源代码编译。 Amandasaurus 2010-02-05T02:12:55+08:002010-02-05T02:12:55+08:00 你应该使用anacron来运行它。它用于每天一次您想要的事情。
将您的脚本放在 init.d 中,以便它在启动时执行。
为了确保它每天只执行一次,您需要做的就是存储上一次执行的日期并将其与当前日期进行比较。这在任何脚本语言中都非常简单。
我用这个。下面的代码保存到可执行文件,命名为 depo,然后你在文件中读取注释。
将其添加到 init.d。让脚本“触摸”一个小文件到它可以访问的目录,作为非特权用户的主目录(除非它需要其他权限)。不要使用 tmp,因为您无法保证该文件将持续存在。用进程的名称命名文件,查找它并检查它的最后修改时间。如果小于 86400 秒前,则退出,否则继续。在“触摸”文件之前进行检查,否则您将始终认为脚本在最后一天没有运行。
在 debian 系统上,我会将脚本放在 /etc/cron.daily 上,然后安装anacron。
Anacron可能是您正在寻找的工具。
不知道 RHEL 是否包含 rpm 或者您是否必须寻找它们甚至从源代码编译。
你应该使用anacron来运行它。它用于每天一次您想要的事情。