繁体   English   中英

Unix,如何将crontab放在shell脚本中

[英]Unix, how to put crontab in a shell script

我是Unix的新手,不确定如何使用crontab。 我想编写一个程序,将在每个午夜更新文件。 0 0 * * *(每天午夜)。 我希望用户仅在程序第一次运行时输入in_variable的值(请看下面的代码),其余的工作在“午夜”进行(不提示用户在第一次后再输入任何值)。 根据旧的输入(in_variable),程序应在每个午夜执行if else语句。 请让我知道是否可行? 任何帮助将不胜感激。

echo "which message would you like to output: "
read in_variable
0 0 * * * 
if [ $in_variable -eq "1" ]; then
   echo "output message 1" >> file1
else
   echo "output message 2" >> file2
fi

Cron作业是自动的,不能依赖任何人机交互。

您的脚本应该从文件中读取其初始输入,或者必须使用交互式脚本(而不是cron )来完成其初始化。

另请注意,您没有在shell脚本中指定调度,而是在crontab本身中指定了调度。 也就是说, 您的问题是从头至尾的 您应该问如何将shell脚本放入crontab中 为此,答案基本上是:

man cron (链接的资源用于BSD,您的cron实现可能有所不同)。

使脚本询问独立于cron作业使用哪个消息,并将消息放入/var/lib下的文件中。 使cron作业检查文件是否存在,然后处理是否存在附加内容。

crontab不能那样工作。 您没有将时间规范放在要运行的程序中; 您将时间指定放在crontab文件中(该位置随系统而异),该文件指定了何时运行程序以及要运行什么程序或命令。

Ignacio正确处理变量:将变量存储在固定位置的文件中,然后让脚本检查文件是否存在。 Cron与这部分无关。

一个快速的丑陋的骇客(更多有关为什么以后会成为骇客)将是:

echo "which message would you like to output: "
read in_variable

if [ $in_variable -eq "1" ]; then
   echo '0 0 * * * echo "output message 1" >> file1' | crontab -
else
   echo '0 0 * * * echo "output message 2" >> file2' | crontab -
fi

这很丑陋,因为它会完全删除当前的crontab。 一个更复杂的答案将为添加到crontab的新行提供某种“标签”,并且如果有人第二次运行脚本,则覆盖旧行。 它还将提供一种删除该行的机制,同时保持先前存在的cron表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM