在 Linux 系统中,可以使用 cron 工具来实现定时任务调度。要在 Linux 中设置一个文件每分钟执行一次,可以按照以下步骤进行操作:
打开 crontab 编辑器
使用以下命令打开当前用户的 crontab 文件:
crontab -e
初次使用时,系统可能会提示你选择一个文本编辑器(如 vim, nano, ed 等),选择你偏好的编辑器。添加定时任务
在 crontab 文件中添加以下行,设置每分钟执行一次指定的脚本文件,例如 /path/to/your_script.sh:
* * * * * /path/to/your_script.sh
crontab 格式说明
crontab 文件中的每一行代表一个定时任务,格式如下:
* * * * * command_to_be_executed
- - - - -
| | | | |
| | | | +-> 星期几 (0 - 7) (周日为 0 或 7)
| | | +----> 月份 (1 - 12)
| | +-------> 一个月中的第几天 (1 - 31)
| +---------> 小时 (0 - 23)
+-----------> 分钟 (0 - 59)
举例
每分钟执行一次脚本:
* * * * * /path/to/your_script.sh
每 5 分钟执行一次脚本:
*/5 * * * * /path/to/your_script.sh
每小时的第 30 分钟执行脚本:
30 * * * * /path/to/your_script.sh
保存并退出编辑器
根据你选择的编辑器,保存 crontab 文件并退出。例如,在 vim 中,可以按 Esc 键后输入 :wq 保存并退出。确认定时任务已添加
使用以下命令查看当前用户的所有 crontab 定时任务,确认任务已成功添加:
crontab -l
你应该会看到刚刚添加的定时任务,例如:
*/5 * * * * /path/to/your_script.sh
- 确保脚本可执行
确保你的脚本具有可执行权限:
chmod +x /path/to/your_script.sh
示例脚本
假设你的脚本文件 your_script.sh 内容如下:
#!/bin/bash
date >> /path/to/logfile.log
打印当前时间到日志文件
date >> /path/to/logfile.log
日志和调试
如果定时任务未如预期运行,可以通过以下方法进行调试:
使用绝对路径 : 在脚本中使用所有命令和文件的绝对路径。
重定向输出 : 在 crontab 设置中重定向 stdout(1) 和 stderr(2) 到日志文件,以便查看执行结果和错误信息。
* * * * * /path/to/your_script.sh > /path/to/output.log 2>&1
检查系统日志 :可以在系统日志中找到有关 cron 任务的信息查看
tail -f /var/log/cron
[root@bk33 ~]$ tail -f /var/log/cron
Nov 28 15:00:02 bk33 CROND[1527]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Nov 28 15:00:02 bk33 CROND[1531]: (root) CMD (/bin/bash /root/custom_report.sh)
Nov 28 15:01:01 bk33 CROND[3491]: (root) CMD (run-parts /etc/cron.hourly)
Nov 28 15:01:01 bk33 CROND[3492]: (root) CMD (/bin/bash /root/custom_report.sh)
Nov 28 15:01:01 bk33 run-parts(/etc/cron.hourly)[3491]: starting 0anacron
Nov 28 15:01:01 bk33 run-parts(/etc/cron.hourly)[3507]: finished 0anacron
Nov 28 15:02:01 bk33 CROND[4744]: (root) CMD (/bin/bash /root/custom_report.sh)
Nov 28 15:03:01 bk33 CROND[6650]: (root) CMD (/bin/bash /root/custom_report.sh)
Nov 28 15:04:01 bk33 CROND[8721]: (root) CMD (/bin/bash /root/custom_report.sh)
Nov 28 15:05:01 bk33 CROND[9213]: (root) CMD (/bin/bash /root/custom_report.sh)