我的基本命令是在cron上失败,但在bash中运行正常

时间:2013-02-01 23:19:09

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

你必须逃避%签名:

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

或试试这个:

* * * * * echo > /tmp/out $((($(head -c2 /dev/urandom|od -An -tu2)/10\%500)+1))