2010-11-14 13 views
1

我是Unix新手,不确定如何使用crontab。我想写一个程序,每半夜更新一个文件。 0 0 * * *(每天午夜)。我希望用户只在程序运行时第一次为in_variable输入一个值(请看下面的代码),然后每隔一个午夜(没有提示用户第一次输入值)。取决于旧的输入(in_variable),程序应该在每个午夜执行if else语句。请让我知道这是否可能?任何帮助将不胜感激。Unix,如何把crontab放在shell脚本中

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 

回答

2

使脚本询问使用哪个消息中分离出来的cron作业,投入的消息在文件/var/lib下。使cron作业检查文件的存在,然后处理追加内容(如果存在)。

3

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

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

另外请注意,你不指定在shell脚本的时间表,但在crontab本身。也就是说,您的问题是是回到前端。您应该询问如何将shell脚本放入crontab?对于这个问题的答案基本上是:

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

1

crontab不能像那样工作。您不会将时间说明放入您想要运行的程序中;你把时间确定在crontab文件的地方(如视系统而定),同时指定运行程序和什么程序或命令运行。

伊格纳西奥有它的权利就做什么用的变量:变量存储在一个固定位置的文件,然后对文件的存在,你的脚本检查。 Cron将与该部分无关。

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