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

时间:2010-11-14 04:08:15

标签: linux shell unix

我是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

4 个答案:

答案 0 :(得分:3)

Cron工作是自动的,不能依赖任何人为干预。

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

另请注意,您不在shell脚本中指定计划,而是在crontab本身中指定计划。也就是说,你的问题是回到正面。你应该问如何将shell脚本放入crontab ?答案基本上是:

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

答案 1 :(得分:2)

让脚本询问哪个消息与cron作业分开使用,将消息放在/var/lib下的文件中。让cron作业检查文件是否存在,然后处理附加内容(如果存在)。

答案 2 :(得分:1)

crontab不能那样工作。您没有将时间规范放在要运行的程序中;你把时间规范放在某个地方的crontab文件中(因系统而异),它指定运行程序的时间要运行的程序或命令。

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

答案 3 :(得分:0)

快速丑陋的黑客攻击(更多关于它为什么会被黑客攻击后)将是:

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表。