【问题标题】:Updating crontab from a makefile从 makefile 更新 crontab
【发布时间】:2010-12-04 05:59:22
【问题描述】:

我正在尝试从 GNU Make 文件更新 crontab。 这个想法是这样的:我查看现有的 cron 表并过滤掉所有标记为我的条目(通过注释)并将其保存到一个临时文件中。然后我将我的工作添加到该临时文件并使其成为一个新的 cron 表。这样,make 文件可以多次运行而不会损害其他人的工作。

这是make文件的相关部分:

crontab.tmp: $(CRON_FILES)
    @echo -n "Generating new cron table combining existing one with a new one ..."
    if $$(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > $@
    @cat $(CRON_FILES) | awk '{print $$0, " ## MAX-CRON-JOB"}' >> $@
    @echo "OK"

.PHONY: cronjobs
cronjobs: crontab.tmp
    @echo -n "Installing cron commands... "
    @crontab $<
    @echo "OK"

令人不安的是这一行:

if $$(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > $@

当 cron 表为空时,它会以某种方式破坏 make,而相应生成的 bash 命令:

if $(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > crontab.tmp

从命令行运行正常。

这是一个错误(如果你问我的话,没有什么特别的信息......):

Generating new cron table combining existing one with a new one ...if $(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > crontab.tmp
make: *** [crontab.tmp] Error 1

我在这里错过了什么?

【问题讨论】:

  • 谢谢大家,我解决了这个问题。然而,我这样做的方式对我来说毫无意义,所以我不会发布我的解决方案。无论如何我无法真正解释它,所以我的主要错误是首先为此目的使用 Make 和 bash :)

标签: bash unix makefile cron


【解决方案1】:

  • 为什么要“转义”crontab?据我所知, 如果 crontab -l;然后 crontab -l | grep -v "MAX-CRON-JOB";菲 > $@

    应该可以正常工作。

  • 为什么要使用条件语句?如果 cron 表是空的,那就这样吧: crontab.tmp: $(CRON_FILES) @echo -n "正在生成新的 cron 表..." @crontab -l | grep -v "MAX-CRON-JOB" > $@ @cat $(CRON_FILES) | awk '{print $$0, " ## MAX-CRON-JOB"}' >> $@ @echo "好的"
  • 【讨论】:

    • 如果crontab文件中没有任何内容,你可能会从grep得到错误状态,所以你可能需要添加'|| true' 到 'crontab -l' 行的末尾。
    • 嗯,是的,条件主要是为了让它成功运行,所以make不会报错,但是我失败了:(
    【解决方案2】:

    尝试更改此行以包含测试(方括号):

    if [ $$(crontab -l) ]; then crontab -l | grep -v "MAX-CRON-JOB"; fi > $@
    

    因为,至少对我来说,没有它,这在 bash 提示符下不起作用:

    if $(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > $@
    

    产量:

    -bash: 0: command not found
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-18
      • 2011-11-03
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多