【发布时间】:2021-11-04 01:28:09
【问题描述】:
我正在编写一个 shell 脚本,我在路径 /path/to/ABC/ABC.txt 中创建一个文件 ABC.txt。
现在我在脚本的最后,我想安排一个 cron 作业在 5 分钟后删除这个文件(只有一次,不会重复)。
我不能在此脚本中添加 5 分钟的 sleep,因为它被服务器上的多个用户用于多个路径/文件。用户执行此脚本 5 分钟后,相应路径中对应的 file.txt 应被删除。
我从 cronjob 中了解到,您可以使用 crontab -e 触发脚本,然后提供作业的定期符号和脚本路径 H/5 * * * * /bin/sh /path/to/ABC/ABC.txt。
谁能告诉我如何使用 cron 来安排这样的功能。如果有更好的方法,请提出建议。
【问题讨论】:
-
不是更适合
at的工作吗? cron 用于定期作业,at 用于执行一次的作业。另一种可能性是从脚本中分离“睡眠和删除”过程,将其置于后台,即(sleep 5; delete ABC.txt) & -
不会因为父进程(脚本)没有终止而在 5 分钟内导致额外的 cpu 负载?我正在为多个用户创建此脚本,因此可能有 100 多个用户同时执行此脚本。那会是瓶颈吗?
-
如果发现 sleep 是由 busy loop 实现的,我会重新格式化我的硬盘并安装一个值得拥有的操作系统名称(Linux、BSD Unix、....)。 “睡眠”的主要缺点是,如果有人在睡眠过程中重新启动计算机,则文件不会被删除,而
at- 至少是 AFIK,已经很久没有使用该命令了 - 删除将在重新启动后完成。如果这是一个问题,为了安全起见,您可能需要通过 Super User 询问。 -
我用
sleep 300实现了几秒钟。它正在工作。我会尽快增加用户数量来更新它。将阅读at并更新
标签: linux shell cron scheduled-tasks script