bash脚本在启动时起作用,不在终端中

时间:2013-01-24 12:09:01

标签: bash amazon-ec2 crontab subshell

我正在Amazon ec2中创建一个服务器并将其作为userdata传递给bash脚本,该脚本在服务器首次启动时运行。它包含一个命令,用于使用答案given here为用户添加一行到crontab。

directory="/home/intahwebz/current/tools/amazon/"
command="cd $directory && sh backupSQLToS3.sh"
job="15 1 */2 * * $command"
cat <(fgrep -i -v "$command" <(crontab -u intahwebz -l)) <(echo "$job") | crontab -u intahwebz -

此脚本在启动期间似乎工作正常,因为它没有显示错误消息,并且cronab中安装了cronjob。

但是我也希望脚本在服务器升级期间运行。尝试从命令行运行脚本会出现错误:

installCrontab.sh: line 14: syntax error near unexpected token `('
installCrontab.sh: line 14: `cat <(fgrep -i -v "$command" <(crontab -u intahwebz -l)) <(echo "$job") | crontab -u intahwebz -'

我需要修复此错误?

2 个答案:

答案 0 :(得分:1)

你的方法对我来说非常有用:

$ whoami
test

$ echo $SHELL
/bin/bash

$ command="cd $directory && sh backupSQLToS3.sh"

$ job="15 1 */2 * * $command"

$ crontab -l


$ cat <(fgrep -i -v "$command" <(crontab -u test -l)) <(echo "$job") | crontab -u test -

$ crontab -l

15 1 */2 * * cd  && sh backupSQLToS3.sh

我错过了设置“目录”变量但你的代码对我来说很好。

答案 1 :(得分:0)

看起来您正在使用bourne shell(/bin/sh)来执行bash脚本。尝试使用bash代替sh