如何在Linux系统上自动执行任务

您自己不必这样做!系统管理员的主要任务之一是在服务器上执行维护工作。这些任务中的大多数可以被自动化或编程为在特定的时间进行而无需用户干预。在本节中,我们将讨论以这种方式执行任务的两个最广泛使用的程序。

使用'at'

'at'是一个执行你打算只执行一次命令的程序。它主要用于在特定情况下安排特定的工作。如果你不得不在每个星期六轮换你公司的网络服务器日志,那么'at'不是适合工作的工具。“cron”会做的最好,关于这个我们稍后会谈谈。假设你的老板,首席技术官,要求在1点与你会面。他想知道你的外部顾问多频繁地登录网络。这是“at”的主要候选人。

首先,你可以输入:

码:

at 12:45

这会给你足够的时间在会议之前得到这些信息。你会看到'at'提示符:

警告:命令将使用/ bin / sh来执行

码:

现在你会写出你想要执行的命令。在这里,我们将得到最后一个命令的输出,它告诉我们最近谁登录了我们的服务器,并将其写入到一个名为“登录”的文件中。第二个命令用分号隔开(然后用lp打印该文件。

码:

last > $HOME/log-ins; lp $HOME/log-ins

按'Enter'然后'Ctl + d',你会看到以下内容:

工作15在2003-02-16 12:45

当然,你的工作号码会随着你使用'at'的次数而变化。

有多种方式可以指出你想要在什么时间执行命令。现在+5分钟将从你输入的时间开始执行一个命令。甚至还有一个下午的时间,在下午4点/ 16点执行指令。(如果你不相信我,请向'man'咨询!)。您也可以取消这些工作。如果你输入:

码:

atrm 15

您将从“at”队列中删除作业15。要查看“at”队列中的内容,请输入:

码:

atq

您可以控制哪些用户可以使用'at'。默认情况下/etc/at.deny控制谁不能使用'at'。也就是说,at.deny中列出的用户不能使用它。你也可以创建一个/etc/at.allow文件。创建at.allow使at守护进程忽略/etc/at.deny

因此,任何不在at.allow的人都不能使用'at'。使用一个或另一个文件的问题归结为您的管理风格的问题。如果你更喜欢让人们使用的东西,直到滥用权限,然后使用默认的at.deny。当用户的“barney”编程工作时,当他要去喝咖啡时,发出一个地狱般的声音,把办公室里的人吓跑,然后把他加到at.deny文件中。如果您认为没有人需要使用它,那么只需要列出您的个人用户帐户即可创建一个at.allow文件。请记住,root用户始终可以使用at。

使用'cron'

从系统管理员的角度来看,cron守护进程可能是自切片面包以来最好的。您可以在任何时间,任何时间,任何时间,任何时间安排几乎任何程序(假设他们没有图形用户界面,因为cron并非真正用于运行GUI应用程序)。也就是说,如果你想要一个IP地址为64.09.200.12的人已经登录到你的计算机的次数的文本转储,你只需要在2月4日,cron会为你做这个。

你想用cron运行的工作可以用不同的方式来安排。最常见的方法是编辑一个称为crontab的文件。通常,每个用户都有他/她自己的,并且可以通过编辑来安排工作。您可以通过输入以下命令来添加和删除crontab中的条目:

码:

crontab -e

码:

30 3 * * 0 $ HOME / bkup_script

在主目录中运行脚本,在星期天凌晨3:30备份文件。如果你把它输入到你的crontab中,你只需按下ESC +:wq这个vi命令即可保存文件。Vi通常是crontab默认使用的编辑器,但是您可以使用除vi以外的文本编辑器,例如,通过输入export VISUAL = pico(例如,允许您使用pico编辑器)。每当你想改变,添加或删除一个条目,你首先键入

码:

crontab -e

输入您想要完成的任何内容,然后键入

ESC +:wq

(或用于将文件保存到您选择的特定文本编辑器中的键的组合)。如果您对crontab文件中的内容感到好奇,并希望列出您编程的作业,请键入:

码:

crontab -l

如果你想删除你的crontab文件,输入

码:

crontab -r

主题

Crontab条目的变化不一定只有数字。我们可以将这些数字与其他字符组合,以修改命令的执行方式。例如,我有一个USB摄像头,它并没有真正做到这一点,每分钟拍摄一张照片,然后关闭。它把照片拍好,但是没有关闭。所以我写了一个脚本来关闭它,然后我添加了一个crontab条目来每分钟调用一次这个脚本。这是我补充说:

码:

0-59 / 1 * * * * $ HOME / shutoff_cam> / dev / null 2>&1

我们一起来看这个部分

0-59 / 1

基本上是指在每小时0-59分钟之间,每隔1分钟间隔,摄像机就要关闭了。为了向你展示cron是多么的有用,我还记得看过一部詹姆斯·邦德的电影,那个永远的坏家伙Blofeld正在洗脑,女孩子正在瑞士阿尔卑斯山的一个基地进行生化攻击。他会每天晚上把这些催眠磁带给女孩们。有一个场景,你看到Blofeld和他的一个小伙子手动切换磁带。如果只有他们有一台Linux电脑!他们可以做到这一点:

码:

30-45 / 3 22 * * * mpg123 /home/esblofeld/brainwash_girls.mp3> / dev / null 2>&1

这将在10:30和10:45 PM之间每3分钟播放一次洗脑指示。

免责声明:请不要在家里尝试清洗技术!此外,LINUX ONLINE不支持SPECER的世界统治方案。这只是作为一个例子。我们认可的唯一的世界统治方案就是那些基督徒的堕落。

我们也应该指出一些你可能已经注意到的两个例子,它们以

命令> / dev / null 2>&1结束

我们最后讨论了这个问题,因为cron在默认情况下会向您发送一个“报告”给您。这样,您可以直接在邮件中获取输出,或者查看命令是否成功。当你向crontab添加一个条目时(比如输入错误的路径或错误的命令名),你可能犯了一个错误。这样,你就会得到通知,即使你的工作很重要,而且你错过了第一个,你可以纠正它,然后你不会错过任何其他的。再次,在上面的例子中,如果我们每次执行命令(每分钟或几分钟)都收到一封邮件,那么您的收件箱会很快填满无用的邮件。因此,我们通过这样的方式使cron将这些作业的通知发送到/ dev / null(即垃圾桶)。

以下是其他一些变体示例:

码:

0 0 15,30 * * cat /var/log/mysql.log > $HOME/mysql_use30 8 * * 1-5 /usr/bin/who

第一个使用逗号,意思是“和”。在第一个例子中,我们看到每个月的15号和30号(当然除了2月份),我们会得到MySQL使用的报告。第二个会运行“谁”,告诉我们谁在每个工作日(上午8:30)登录。对于希望在他们开始工作时查看谁正在工作(或至少是谁已登录)的系统管理员来说,这将是一个特别好的选择。

cron的权限使用cron的能力与“at”相同。那些在/etc/cron.deny中不允许使用cron,并允许所有其他用户。如果你有一个/etc/cron.allow文件,它将取代cron.deny(即,cron.deny被忽略),并且只允许其中列出的那些文件使用cron。

cron.hourly,cron.daily和cron.monthly

大多数Linux发行版在/ etc中有三个名为cron.hourly,cron.daily和cron.month的目录,正如您可能已经猜到的那样,它允许系统管理员按小时,每天或每月运行作业。只需在这里放置一个shell脚本,就可以在这些间隔中执行作业。这些作业不需要有crontab条目。

正如你所看到的,天空是你可以用cron做的事情的极限。它不会让你到达你编程绝对一切的地步,让你在沙滩上度过你的工作时间,但它会使你的生活变得更简单。

关注吕田论坛获取更多资讯

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180112G0OSVW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券