使用 Bash 构建任务调度器

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本项目将指导你使用Bash脚本创建一个任务调度器。任务调度器可让你安排和管理按指定间隔(如每小时、每天或每周)执行的任务。该脚本提供了列出已调度任务、添加新任务和删除现有任务的选项。

👀 预览

任务调度器脚本预览

要开始,请创建一个名为 task_scheduler.sh 的文件,并在其中写入提供的代码。让我们进入第一步。

🎯 任务

在本项目中,你将学习:

  • 如何创建项目文件
  • 如何添加代码以显示已调度任务
  • 如何添加代码以添加新任务
  • 如何添加代码以删除任务
  • 如何设置主菜单循环
  • 如何使脚本可执行
  • 如何运行项目

🏆 成果

完成本项目后,你将能够:

  • 创建一个Bash脚本
  • 使用crontab调度任务
  • 在Bash脚本中提示用户输入
  • 从crontab中添加和删除任务
  • 在Bash脚本中创建菜单循环
  • 使Bash脚本可执行并运行它

创建项目文件

使用你选择的文本编辑器创建一个名为 task_scheduler.sh 的新文件。你可以使用以下命令创建该文件:

cd ~/project
touch task_scheduler.sh

现在在你的文本编辑器中打开该文件。

✨ 查看解决方案并练习

添加显示已调度任务的代码

如果你的系统尚未安装crontab,请进行安装。要安装crontab,请在终端中运行以下命令:

sudo apt-get update
sudo apt-get install cron

task_scheduler.sh 文件中,添加以下代码:

#!/bin/bash

## 显示已调度任务的函数
list_tasks() {
  echo "已调度任务:"
  crontab -l
  echo
}

此代码定义了一个名为 list_tasks 的函数,该函数使用 crontab -l 命令显示已调度任务。

✨ 查看解决方案并练习

添加添加新任务的代码

在之前添加的代码下方,添加以下代码:

## 添加新任务的函数
add_task() {
  read -p "输入要执行的命令或脚本:" command
  read -p "输入调度时间(每小时、每天、每周):" schedule
  read -p "输入任何其他参数:" parameters

  case $schedule in
    hourly)
      cron_schedule="0 * * * *"
      ;;
    daily)
      cron_schedule="0 0 * * *"
      ;;
    weekly)
      cron_schedule="0 0 * * 0"
      ;;
    *)
      echo "无效的调度时间。请选择每小时、每天或每周。"
      return
      ;;
  esac

  ## 将任务添加到crontab
  (
    crontab -l 2> /dev/null
    echo "$cron_schedule $command $parameters"
  ) | crontab -

  echo "任务已成功调度。"
  echo
}

此代码定义了一个名为 add_task 的函数,该函数提示你输入要执行的命令或脚本、调度时间(每小时、每天或每周)以及任何其他参数。然后,它根据所选的调度时间设置适当的cron调度。最后,它使用 crontab -l 命令将任务添加到crontab中。

✨ 查看解决方案并练习

添加删除任务的代码

在之前添加的代码下方,添加以下代码:

## 删除任务的函数
remove_task() {
  read -p "输入要删除的命令或脚本:" command

  ## 从crontab中删除任务
  crontab -l | grep -v "$command" | crontab -

  echo "任务已成功删除。"
  echo
}

此代码定义了一个名为 remove_task 的函数,该函数提示你输入要删除的命令或脚本。然后,它使用 crontab -l 命令从crontab中删除该任务。

✨ 查看解决方案并练习

添加主菜单循环的代码

在之前添加的代码下方,添加以下代码:

## 主菜单循环
while true; do
  echo "任务调度器"
  echo "1. 列出已调度任务"
  echo "2. 添加任务"
  echo "3. 删除任务"
  echo "4. 退出"
  read -p "输入你的选择:" choice
  echo

  case $choice in
    1)
      list_tasks
      ;;
    2)
      add_task
      ;;
    3)
      remove_task
      ;;
    4)
      break
      ;;
    *)
      echo "无效选择。请重试。"
      echo
      ;;
  esac
done

此代码设置了一个主菜单循环,该循环会反复显示一个菜单并提示你进行选择。根据所选选项,它会调用相应的函数(list_tasksadd_taskremove_task)或退出循环。

✨ 查看解决方案并练习

保存并关闭文件

将对 task_scheduler.sh 文件所做的更改保存起来,并关闭文本编辑器。

要使该脚本可执行,请在终端中运行以下命令:

chmod +x task_scheduler.sh

此命令为 task_scheduler.sh 文件设置执行权限。

✨ 查看解决方案并练习

运行项目

要运行任务调度器,请在终端中执行以下命令:

./task_scheduler.sh

此命令运行 task_scheduler.sh 脚本并启动任务调度器。按照屏幕上的说明列出已调度任务、添加新任务或删除现有任务。

任务调度器终端输出
✨ 查看解决方案并练习

总结

恭喜你!你已成功完成任务调度器项目。你创建了一个Bash脚本,可用于调度和管理任务。该脚本提供了列出已调度任务、添加新任务以及删除现有任务的选项。你可以根据自己的特定需求进一步自定义该脚本。祝你调度愉快!