📜  如何在 crontab 中将参数传递给 shell 脚本?

📅  最后修改于: 2022-05-13 01:57:30.150000             🧑  作者: Mango

如何在 crontab 中将参数传递给 shell 脚本?

在本文中,我们将讨论如何在 contrab 中调度 shell 脚本并传递必要的参数。

首先,让我们创建一个简单的脚本,我们将安排它每 2 分钟运行一次。下面是一个简单的脚本,它计算所有传递的参数的总和,并将它们与脚本运行的时间一起打印到 STDOUT。

#! /usr/bin/sh
SUM=0
for i in $@ 
do 
    SUM=`expr $SUM + $i`
done
echo "$SUM was calculated at `date`"

注意: #! /usr/bin/sh (指定脚本解释器的路径)是必要的,如果想让脚本可执行。

假设我们已将此脚本保存为我们的主目录下的 my_script.sh,我们可以通过在终端中输入以下命令使其可执行:

chmod +x my_script.sh

我们可以测试我们的脚本是否正常工作:



./my_script.sh 1 2 3 4 5
15 was calculated at Thursday 01 July 2021 01:24:04 IST 2021

crontab 调度表达式有以下几个部分:

要调度我们的脚本执行,我们需要在 crontab 文件中输入 crontab 调度表达式。为此,只需在终端中输入以下内容:

crontab -e

系统可能会提示您选择编辑器,选择 nano 并将以下行附加到打开的 crontab 文件的末尾:

其中$(USER)可以替换为您的用户名。保存更改并退出。这将安排我们的 shell 脚本每 2 分钟运行一次,使用1 2 3 4 5作为命令行参数,并将输出写入/home/$(USER)/ouput.txt

注意:在安排 cron 作业之前需要记住以下几点:

  • 所有 cron 作业都在本地时区进行调度,调度作业所在的系统在该时区中运行。如果作业被安排在有跨国人员使用的服务器上,这可能会很麻烦。特别是如果用户也属于遵循夏令时惯例的国家/地区。
  • 如果我们希望看到它们,所有 cron 作业都在它们自己独立的、匿名的 shell 会话中运行,并且它们到 STDOUT(如果有)的输出必须被定向到一个文件。
  • 所有 cron 作业都在为其安排的用户的上下文中运行。因此,为脚本和输出文件提供绝对路径以避免任何混淆和混乱始终是一种很好的做法。