30秒写出高效脚本?

cron 任务调度(最常用)

原理:通过守护进程crond周期性执行任务。
适用场景:需要按固定周期(分钟/小时/天等)重复执行的任务。

操作步骤

  1. 编辑用户级定时任务

    crontab -e  # 编辑当前用户的任务

    在打开的文件中添加规则(每行一个任务):

    # 格式:分 时 日 月 周 <命令>
    * * * * * /path/to/script.sh  # 每分钟执行
    0 3 * * * /backup.sh         # 每天凌晨3点执行
    30 15 * * 1-5 /send_report.sh # 每周一至五下午15:30执行
  2. 系统级定时任务
    管理员可将脚本放入以下目录:

    /etc/cron.hourly/   # 每小时
    /etc/cron.daily/    # 每天
    /etc/cron.weekly/   # 每周
    /etc/cron.monthly/  # 每月
  3. 查看与调试

    crontab -l          # 列出当前任务
    tail -f /var/log/cron # 查看执行日志

at 单次任务调度

原理:在指定时间点执行一次性任务。
适用场景:计划关机、临时备份等单次任务。

操作步骤

  1. 安装 at 工具

    sudo apt install at  # Debian/Ubuntu
    sudo yum install at  # CentOS/RHEL
  2. 创建任务

    at 14:30 2025-12-31  # 指定时间
    at> /path/to/script.sh
    at> Ctrl+D           # 保存退出
  3. 管理任务

    atq                 # 查看队列
    atrm <任务ID>       # 删除任务

systemd Timer(现代系统推荐)

原理:通过.timer单元控制.service单元的执行时间。
适用场景:需要依赖系统启动、精确到秒的定时任务。

操作步骤

  1. 创建服务单元(如/etc/systemd/system/backup.service

    [Unit]
    Description=Backup Script
    [Service]
    ExecStart=/usr/local/bin/backup.sh
  2. 创建定时器单元(如/etc/systemd/system/backup.timer

    [Unit]
    Description=Run backup daily
    [Timer]
    OnCalendar=*-*-* 03:00:00  # 每天3点执行
    Persistent=true            # 补执行错过的任务
    [Install]
    WantedBy=timers.target
  3. 启用并启动

    sudo systemctl daemon-reload
    sudo systemctl enable --now backup.timer
  4. 检查状态

    systemctl list-timers      # 查看所有定时器
    journalctl -u backup.service # 查看日志

sleep 或 while 循环(脚本内定时)

原理:在脚本中使用sleep控制执行间隔。
适用场景:简单轮询任务(如每10秒检测服务)。

示例脚本

  /path/to/monitor.sh  # 执行任务
  sleep 300            # 休眠300秒(5分钟)
done

选择建议

方法 执行周期 精度 复杂度
cron 周期性 分钟级
at 单次 分钟级
systemd timer 周期/单次 秒级
sleep 循环 短周期轮询 秒级 高(需手动管理)

安全与最佳实践

  1. 权限控制

    • 使用crontab -e而非直接编辑/etc/crontab避免权限错误。
    • 限制at使用权限:编辑/etc/at.deny/etc/at.allow
  2. 日志记录

    • 在脚本中重定向输出:* * * * * /script.sh >> /var/log/script.log 2>&1
    • systemd服务启用日志:journalctl -u service_name
  3. 环境变量问题

    • cron任务需指定完整路径(如/usr/bin/python3),或在脚本开头设置PATH
  4. 资源监控

    • 避免高频任务耗尽资源,使用systemdCPUQuota限制CPU占用。

常见错误排查

  • 任务未执行:检查crondatd服务状态:systemctl status cron
  • 权限不足:确保脚本有执行权限(chmod +x script.sh)。
  • 路径错误:在脚本中使用绝对路径,或在cron中设置PATH变量。
  • 时间配置错误:使用工具验证时间格式(如crontab.guru在线验证)。

引用说明

  • cron 语法参考:Linux man 5 crontab
  • systemd timer 官方文档:freedesktop.org – systemd.timer
  • at 命令手册:Linux man at 基于Linux内核5.4+及systemd 245+版本验证,适用于主流发行版(Ubuntu 20.04+, CentOS 8+)。*

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5532.html

(0)
酷番叔酷番叔
上一篇 2025年6月24日 16:15
下一篇 2025年6月24日 16:38

相关推荐

  • Linux启动IBM Db2如何确保安全?

    启动前准备环境要求已安装Db2服务器(版本推荐v11.5+)使用db2inst1实例用户(默认安装创建)确保系统内存≥2GB,磁盘空间充足检查实例状态切换至实例用户后执行:su – db2inst1 # 切换到实例用户db2ilist # 查看当前实例列表db2 get dbm cfg | grep &quot……

    16小时前
    200
  • Linux中断处理,内核与用户空间有何不同?

    内核中断处理:如何提前退出中断服务程序当硬件触发中断(如键盘输入、网络数据到达)时,CPU会暂停当前任务,执行对应的中断服务程序(ISR),ISR需快速完成关键操作,通常不允许“跳出”,但可通过以下方式提前返回:使用 return IRQ_HANDLED 或 return IRQ_NONE在注册的中断处理函数中……

    2025年6月18日
    1500
  • Linux下如何高效查看SVN提交日志?

    基础命令:svn log在终端执行以下命令查看当前工作副本的完整日志:svn log输出示例:————————————————————————r123 | user1 | 2023-10-05 14:30:00 +0……

    2025年6月24日
    1000
  • 忽略超线程,统计物理核心数如何优化?

    在Linux系统中,查看CPU核数是系统管理、性能优化和资源分配的基础操作,无论是部署应用、排查性能瓶颈,还是调整虚拟机配置,准确获取CPU信息都至关重要,以下是多种经过验证的方法,适用于不同发行版(如Ubuntu、CentOS、Debian等),每种方法均附详细说明和示例,方法1:lscpu命令(推荐)最权威……

    2025年6月16日
    1400
  • Linux如何配置静态动态IP?命令与文件双方法

    基础概念网卡命名规则传统命名:eth0、eth1(旧版本)可预测命名:enp0s3(以太网)、wlp2s0(无线,新版本通用)查看网卡名称:ip link show 或 ls /sys/class/net关键配置文件路径Ubuntu/Debian:/etc/network/interfacesCentOS/RH……

    2025年7月6日
    1400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信