我需要在关闭/终止AWS实例(debian)期间执行脚本。
我将脚本添加到#include <stdio.h>
#include <string.h> /* strlen() */
#include <ctype.h> /* isdigit() */
int main()
{
int n, invalidInput, status;
char strInput[5];
int i; /* for loop */
do {
invalidInput = 0;
printf("Enter a **number** between 1 and 100: ");
fflush(stdin);
status = scanf("%4s", strInput); /* read at maximum 4 chars from stdin */
if (status > 3) {
continue; /* try again */
}
for (i = 0; i < strlen(strInput); ++i) { /* ensure that all characters are numbers */
if (!isdigit(strInput[i])) {
invalidInput = 1;
break;
}
}
if (!invalidInput) {
n = atoi(strInput); /* now your input is a integer */
if (n < 1 || n > 100) {
printf("Error: the input must be between 1 and 100.\n");
invalidInput = 1;
}
}
} while (invalidInput); /* repeat until all chars are digits and they are in the required interval */
return 0;
}
,并且将符号链接添加到/etc/init.d/myscript
,但是我注意到,在终止实例时,我看不到脚本已执行。
有什么主意吗?
答案 0 :(得分:1)
我不希望Amazon正常终止实例。在正常的操作系统关闭期间,请确保您可以运行kill脚本。但不是终止。如果您有兴趣收到有关终止通知的信息,请查看将EC2 CloudWatch events附加到实例。根据文档,您可以获得:
此EC2实例状态更改通知事件的示例显示 实例处于挂起状态。状态的其他可能值 包括运行,关闭,停止,停止和终止。
带有JSON包,例如:
{
"id":"7bf73129-1428-4cd3-a780-95db273d1602",
"detail-type":"EC2 Instance State-change Notification",
"source":"aws.ec2",
"account":"123456789012",
"time":"2015-11-11T21:29:54Z",
"region":"us-east-1",
"resources":[
"arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"
],
"detail":{
"instance-id":"i-abcd1111",
"state":"pending"
}
}
如果您确实需要处理此问题,则必须先关闭操作系统,这将运行您的脚本,然后终止已停止的实例。