【问题标题】:Crontab and variablescrontab 和变量
【发布时间】:2016-01-12 23:51:40
【问题描述】:

我尝试在我的 Crontab 中使用变量,但面临的事实是它们的工作方式很奇怪。这是一个例子:

FOO=echo date
BAR=/root/foobar
COMB=echo date >> /root/comb

* * * * * $FOO >> $BAR
* * * * * $COMB

foobar 工作正常,但 comb 不能(未创建梳子文件)。 还有类似的东西:

FOO=echo `date`
BAR=/root/foobar

* * * * * $FOO >> $BAR

FOO=echo date
BAR=~/foobar

* * * * * $FOO >> $BAR

也不行。好像有一些符号限制可以在 crontab 文件中的变量中使用,对吗?

我的目标是简单地检查一个 ruby​​ 脚本是否已经在运行,如果没有则重新启动它:

STARTSCRIPT='ruby ~/RubyScripts/Script.rb'
*/5 * * * * pgrep -f "$STARTSCRIPT" &>/dev/null || $STARTSCRIPT

但由于这些限制,它不起作用。或者也许我做错了什么) 所有东西都可以在 SmartOS(某种 Solaris)内的 lx 品牌区域 Ubuntu 14.04 LX 0150320 上运行。

【问题讨论】:

    标签: bash ubuntu crontab


    【解决方案1】:

    符号没有限制,只是它们有特殊含义,你不知道。

    FOO='/bin/date'
    BAR='/root/foobar'
    COMB='echo /bin/date >> /root/comb'
    
    * * * * * $FOO >> $BAR
    * * * * * $COMB
    

    在第二个代码sn-p中:

    FOO='/bin/date'  #there is absolutely no point in echoing here
    BAR='/root/foobar'
    
    * * * * * $FOO >> $BAR
    

    编辑:

    这是您如何检查状态脚本并在不运行时运行它的方法:

    SCRIPT_NAME='/absolutepath/RubyScripts/Script.rb'
    SCRIPT_CMD="/usr/bin/ruby $SCRIPT_NAME"
    
    */5 * * * * pgrep $SCRIPT_NAME > /dev/null || $SCRIPT_CMD
    

    【讨论】:

    • 谢谢。所以,我的错误是在分配表达式时,必须使用反引号。但是第三个 sn-p 只能以这种形式工作:STARTSCRIPT=ruby ~/RubyScripts/Script.rb */5 * * * * pgrep -f "$STARTSCRIPT" >/dev/null || $STARTSCRIPT 你能否解释一下为什么我不能在 crontab 表达式中使用&>?非常感谢。
    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 2014-02-10
    • 2014-01-03
    • 1970-01-01
    • 2020-03-02
    • 2013-10-09
    • 1970-01-01
    • 2015-08-25
    相关资源
    最近更新 更多