我编写了一个/etc/rc.local
脚本,它执行一个jar文件并在完成后自动关闭系统。该脚本似乎成功启动但最终在完成之前关闭。
#!/bin/sh
#
mv --backup=t /tmp/rc.local.log /home/hadoop/logs
exec 2> /tmp/rc.local.log # send stderr from rc.local to a log file
exec 1>&2 # send stdout to the same log file
set -x # tell sh to display commands before execution
touch /var/lock/subsys/local
EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
test -n "$EC2_INSTANCE_ID" || die 'cannot obtain instance-id'
EC2_AVAIL_ZONE="`wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone || die \"wget availability-zone has failed: $?\"`"
test -n "$EC2_AVAIL_ZONE" || die 'cannot obtain availability-zone'
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"
##########
#run hadoop job
#############
su - hadoop -c 'java -jar /home/hadoop/my.jar'
##stop instance
/opt/aws/bin/ec2-stop-instances $EC2_INSTANCE_ID --region $EC2_REGION
知道我做错了什么吗?谢谢!
答案 0 :(得分:0)
set -x会在出现1或更高的错误时自动关闭脚本。
如果我要更正,你的变量如EC2_INSTANCE_ID 需要拿掉双引号。这是因为双引号内的所有字符都是文字值,但$
除外尝试
EC2_INSTANCE_ID= `wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die wget instance-id has failed: "$?"`
另外我注意到你有很好的错误捕获命令,所以可以带走set -x,这样你就可以看到在脚本退出之前你得到了什么错误。
我以前也没见过死命令。