如何使用cron调度Perl脚本

Cron是一个在类UNIX平台上可用的作业调度程序。大多数系统命令都可以被调度,包括执行Perl程序。一旦设置了一个作业,cron就会按照计划执行它,即使用户未登录,这可以是一个自动化系统管理任务或重复性工作的好方法。本文介绍了如何使用cron运行Perl脚本。

Perl脚本技巧

当准备由cron运行的脚本时,有一些事情需要注意。你可能在脚本的末尾添加一个shebang行来指定要执行的Perl二进制文件。例如

#!/usr/local/bin/perl

如果你计划在不同的平台上运行脚本,可以省略shebang行,因为Perl二进制文件的位置可能因平台而异(关于这一点后面会详细介绍)。

此外,请确保脚本中使用的任何路径都是绝对路径(例如,用于打开文件句柄、数据库连接字符串和外部程序路径)。

设置crontab

要使用cron调度作业,需要将作业添加到用户的crontab中。为此,打开终端并输入以下内容

crontab -e

这将打开crontab以文本编辑器。要添加作业,必须以以下格式添加一行

* * * * * command to be executed
| | | | |
| | | | |
| | | | +----- day of week  (0 - 6, Sunday=0)
| | | +------- month        (1 - 12)
| | +--------- day of month (1 - 31)
| +----------- hour         (0 - 23)
+------------- min          (0 - 59)

An asterisk (*) means all.

以下是一些示例crontab条目

# execute every minute
* * * * * perl /path/to/Beacon.pl

# execute every 5 minutes
*/5 * * * * perl /path/to/Beacon.pl

# execute every hour at 0 minutes past the hour
0 * * * * perl /path/to/Beacon.pl

# execute every 12 hours at half past the hour
30 */12 * * * perl /path/to/Beacon.pl

如果你的脚本不包含shebang行,请在crontab中提供Perl二进制文件的绝对路径。例如

30 */12 * * * /usr/local/bin/perl /path/to/Beacon.pl

保存crontab并退出文本编辑器。要检查作业是否已调度,可以从终端使用以下命令检查你的crontab

crontab -l

这将打印你的当前crontab到终端。

解决cron问题

使用cron通常很简单,但如果你在运行Perl脚本时遇到困难,请检查以下内容

  • 检查cron日志以确认cron是否正在按预期运行作业。通常位于这里:/var/log/cron
  • 请确保你提供了正确的Perl二进制文件的绝对路径。要么在脚本内部的shebang行中,要么在crontab中(如果你不确定这是什么,请在终端中键入“which perl”)。
  • 确保脚本权限允许执行(例如,“chmod +x /path/to/file”)
  • 如果你在Perl脚本中运行其他程序,请考虑将它们的二进制路径添加到crontab中,因为cron的PATH与用户不同。
  • 如果你需要以root身份运行脚本,只需使用sudo创建root的crontab:“sudo crontab -e”

有关cron的一般技巧的好列表可以在这里找到。


本文最初发布于PerlTricks.com

标签

David Farrell

David是一位专业的程序员,他经常推文博客关于代码和编程的艺术。

浏览他们的文章

反馈

这篇文章有什么问题吗?通过在GitHub上打开一个问题或拉取请求来帮助我们。