你说的是要连续运行几周,对吧?因此,我们必须考虑到系统将重新启动并且需要无人值守运行。简而言之,您需要一些方法来确保脚本每周至少运行一次,即使周围没有人也是如此。选项看起来像这样
选项 1(最差)
您为自己设置提醒,然后每周登录并运行脚本。虽然你作为一个人可能是可靠的,但这并不能让你去度假。此外,这也违背了我们“无人时”的原则。
选项 2(好的)
您可以在后台处理进程 ( ./once-a-week.sh &
),但随着时间的推移,这将不可靠。除其他外,如果系统重新启动,那么您的脚本将无法运行并且您不会知道。
选项 3(更好)
为了在数周内保持可靠,一个选项是守护脚本。有关此问题的更详细讨论,请参阅:制作 shell 脚本守护程序的最佳方法?
您需要确保在重新启动或系统故障后启动守护程序。有关该问题的更多讨论,请参阅:使用 Linux 启动守护程序
选项 4(最佳)
您说不cron
,但它确实是最佳选择。特别是在不需要运行的 6 天 23 小时 59 分钟内不会消耗系统资源。此外,它对重启等具有自然的弹性。因此,我不得不说,创建如下所示的 crontab 条目将是我的首选:@weekly /full/path/to/script
如果您确实选择了上面的选项 2 或 3,您将需要修改您的脚本以包含date +%V
该脚本最后一次成功完成其运行的周数 ( ) 的变量。问题是,仅将其保存在内存中意味着它不会在重新启动后持续存在。
为了使上述任何一项更具弹性,最好创建一个目录,您可以在其中存储文件以用作信号量(例如week21.txt
)或文件以存储上次运行的状态。类似的东西once-a-week.state
,你会在运行时写一个值:
date +%V > once-a-week.state # write the week number to a file
然后要读取该值,您将:
file="/path/to/once-a-week.state" # the file where the week number is stored
read -d $'\x04' name < "$file"
echo "$name"
然后,您需要检查周数是否与当前周数匹配,并根据匹配情况处理所需的操作。