我是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
答案 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表。