【问题标题】:My very basic command is failing on cron but runs fine otherwise, in bash我非常基本的命令在 cron 上失败,但在其他情况下运行良好,在 bash
【发布时间】:2013-02-02 07:39:54
【问题描述】:

我正在尝试这个非常基本的东西,输出一个随机数:

NUMBER=$[ ( $RANDOM % 500 )  + 1 ]; echo $NUMBER > /tmp/out

它直接在 Debian 的 CLI 上运行良好,但是当我尝试 cron 时,要么按原样:

* * * * * NUMBER=$[ ( $RANDOM % 500 )  + 1 ]; echo $NUMBER > /tmp/out

或者以各种方式作为脚本的一部分,它在我的电子邮件警报中始终失败:

/bin/sh: Syntax error: "(" unexpected

我非常缺乏实践,所以我认为这是显而易见的。我已经尝试了所有我能想到的包围类型组合,但没有运气。我错过了什么?

我收到的完整邮件提醒是:

From: Cron Daemon 
Sent: Friday, February 01, 2013 2:41 PM
Subject: Cron <root@host> NUMBER=$[ ( $RANDOM (failed)

/bin/sh: Syntax error: "(" unexpected

【问题讨论】:

  • /bin/sh(cron 的默认 shell)与您正在测试脚本的 bash 不同。如果你想要 bash,那么将该行保存在一个文件中并让 bash 运行它:* * * * * /bin/bash /home/you/your_file.sh
  • 谢谢。这在几年前就很明显了。你忘记的事情......

标签: bash cron debian command-line-interface sh


【解决方案1】:

正如 F. Hauri 指出的那样,除了转义 % 符号之外,cron 使用 /bin/sh 运行命令,这不一定支持 bash 的所有功能。

* * * * * bash -c 'NUMBER=$[ ( $RANDOM \% 500 )  + 1 ]; echo $NUMBER > /tmp/out'

或者更好的是,将命令放入带有#!/bin/bash 的脚本中,然后从您的crontab 执行脚本。

【讨论】:

  • 非常棒,谢谢!你和 F. Hauri 在这里解决这个问题真是太棒了。
猜你喜欢
  • 2017-07-23
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 2021-07-22
  • 2023-02-17
  • 1970-01-01
  • 2017-10-27
相关资源
最近更新 更多