![在 Linux 启动时运行 Shell 脚本但每天只能运行一次](https://linux22.com/image/504974/%E5%9C%A8%20Linux%20%E5%90%AF%E5%8A%A8%E6%97%B6%E8%BF%90%E8%A1%8C%20Shell%20%E8%84%9A%E6%9C%AC%E4%BD%86%E6%AF%8F%E5%A4%A9%E5%8F%AA%E8%83%BD%E8%BF%90%E8%A1%8C%E4%B8%80%E6%AC%A1.png)
- 在 Linux 启动时运行 Shell 脚本但每天只能运行一次,我该怎么做?
- 我正在使用 Redhat Enterprise Linux 5
答案1
将您的脚本放入 init.d 中,以便它在启动时执行。
为了确保它每天只执行一次,您只需存储上次执行的日期并将其与当前日期进行比较。这在任何脚本语言中都很容易做到。
答案2
我用的是这个。下面的代码保存到可执行文件,名为 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"
答案3
将其添加到 init.d。让脚本将一个小文件“接触”到它有权访问的目录,即作为非特权用户的主目录(除非它需要其他权限)。不要使用 tmp,因为您无法保证文件会持久存在。用进程的名称命名文件,查找它并检查其上次修改时间。如果它少于 86400 秒,则退出,否则继续。在“接触”文件之前进行检查,否则您将始终认为脚本在过去一天没有运行。
答案4
你应该使用阿纳克隆运行它。它用于每天执行一次您想要执行的操作。