网站搜索

我如何在不触碰Linux终端的情况下使用它:我的极端自动化秘密


Linux 终端是从命令行在计算机上运行程序的强大方式。使用脚本,你可以轻松地重复常见任务,甚至使用复杂的编程逻辑。

但是使用自动化可能会很麻烦,特别是如果你不喜欢使用终端的话。幸运的是,Linux 提供了几种方便的任务管理解决方案,无论你是需要安排重复运行的程序还是按需执行它们。

自动化什么以及为什么

如果你需要不止一次地做这件事,就把它自动化

首先,你首先可能想自动化什么,为什么?

我非常不擅长的一件事就是清理我的下载文件夹;随着时间的推移,它越来越大,然后我最终只能手动删除所有东西:

rm -rf ~/Downloads/*

虽然这可以正常工作,但必须不断重复操作很麻烦,所以我喜欢自动化这个过程。自动化任务有两个主要好处:它可以节省你的时间,并且让你对任务有更大的控制。从终端运行脚本和输入文件名或命令然后按回车一样简单:

# run a command from your PATH
clear-downloads

# run a command from a file
~/.local/bin/clear-downloads

当然,这比运行那些脚本或程序可能包含的特定命令要容易和快捷得多。使用脚本还让我能够添加相关功能:例如,我可以在日志中记录已删除内容的详细信息,或者根据文件的大小或年龄筛选文件。

任何你可能想要多次执行的事情都是自动化的候选。记录网络流量、报告磁盘使用情况、更新软件或更新 RSS 订阅都是很好的例子。

如何使用 cron 自动化

在 Linux 上安排任务的经典方式

半个世纪以来,cron一直是安排任务在特定时间运行的主要方式。Cron遵循经典的Unix原则,即纯文本更优,简单的格式是最好的:

crontab 文件包含要运行的任务列表,每个任务的格式如下:

m h d o w <command to run>

在这种格式中,m(分钟)、h(小时)、d(月份中的天)、o(月份)和 w(星期几)是定义任务运行时间的数字,因此你可以通过如下这一行设置一个任务在每个星期五的10:00运行:

* 10 * * 5 /Users/bobby/.local/bin/clear-downloads

虽然 cron 持续存在,但它也有批评者。其语法并不总是容易记住——甚至理解——cron 运行的环境也不明显,排查问题可能很困难,并且任务严格依赖于时钟时间。Cron 可能适合简单的工作,但有一个更强大、改进的替代方案:systemd。

如何使用 systemd 自动化以及为什么它更好

提供 cron 做的一切,以及更多

systemd 软件是一种更现代的服务管理方法,它可以完成 cron 所做的事情,以及更多功能。你仍然可以使用它来调度脚本,但 systemd 还处理系统进程、启动管理、事件日志记录和网络解析。

systemd 任务比 cron 条目需要更多的初始设置,但一旦创建,它的可用性要高得多。举一个简单的例子,假设你在 /home/bobby/scripts/clear-docs.sh 有一个脚本:

#!/bin/sh

# Remove everything. Can be modified to remove only a certain number of files,
# only files above a certain size, files older than a certain age, etc.

rm --recursive --force --verbose ~/Documents/*

要将其作为计划的 systemd 任务(称为定时器)安装,请在 /etc/systemd/system/clear-docs.service 创建一个附加文件:

[Unit]
Description=Cleans out the Documents directory as a demo of systemd timers
Wants=clear-docs.timer

[Service]
User=bobby
Group=bobby
Type=oneshot
ExecStart=/home/bobby/scripts/clear-docs.sh

[Install]
WantedBy=multi-user.target

请注意,这个文件的格式非常像 Windows 的 .ini 文件格式,带有括号中的标题部分,并且每行都有名称/值对。

The Wants= 指令是 systemd 超越 cron 的一个很好的例子。它指定了对另一个单元的依赖,你可以在 /etc/systemd/system/clear-docs.timer 的单独文件中创建它:

[Unit]
Description=Timer for: clear-docs.service
Requires=clear-docs.service

[Timer]
Unit=clear-docs.service
# Run the timer, every hour, on the hour
OnCalendar=*-*-* *:00:00

[Install]
WantedBy=timers.target

该定时器定义使用了 OnCalendar 指令,看起来有点像 cron 用来安排每条命令的前缀。然而,systemd 软件提供了更大的灵活性:你可以设置自动化以响应相对时间,例如“启动后十分钟”(OnBootSec=10min),甚至响应与时间无关的事件,例如当特定文件被修改时。

创建这些文件后,您现在可以通过重启 systemd 并启动您的新服务来完成设置:

sudo systemctl daemon-reload
sudo systemctl enable clear-docs.timer
sudo systemctl start clear-docs.timer

此时,您可以通过查询计时器来检查一切是否正常运行:

systemctl status clear-docs.timer

请注意,返回的信息包括计时器何时启动以及下一次触发时间。

您还可以查询该服务,它会提供脚本文件的详细信息和简要日志:

使用图形界面控制 systemd

使用这些应用中的一个,以便轻松访问自动化功能

把繁重的工作处理掉之后,你可以使用像 Systemd Manager 这样的前端应用来控制各个 systemd 服务。

这个基于 GTK 的应用程序让您可以查看服务、启用单个单元,并编辑自动化文件。您还可以查看它们的日志并分析系统启动所需的时间。

在日常使用中,我更喜欢同名的 GNOME 扩展,它是一个更简单的替代方案。它在你的顶部面板添加了一个下拉菜单,你可以选择包含各个服务。






使用此扩展,你只需点击两下即可启动、停止和重启服务。它始终可用,因此你无需靠近终端即可运行自动化任务,即使是那些通常安排在特定时间的任务。按需运行作业可以帮助你调试它,而 systemd 使这比 cron 更容易。


要获得无与伦比的灵活性,systemd 是首选

并不是每个人都是 systemd 的粉丝,我能理解原因。对于那些习惯了 cron 的人来说,它的学习曲线更陡,而且它的复杂性并不总是遵循 Linux 的原则。

然而,不可否认,在受控环境中运行的计划任务的好处,其内置了诸如日志记录的高级功能。借助支持 GUI 应用程序提供的一键控制和无终端操作体验,systemd 非常值得您花时间研究。

相关文章