2009-02-13 36 views
6

Tôi đã tạo Amazon AMI tùy chỉnh (Fedora) chạy một vài tập lệnh và sau đó tắt.Kịch bản khởi động trên EC2

Vấn đề với AMI là nếu mã của tôi thay đổi thì phải có một cách cho cá thể AMI để lấy các tập lệnh mới nhất trước khi thực thi chúng.

tôi đã viết một kịch bản shell & đặt nó trong /etc/init.d/nt_startup

Để giữ mã đến nay, tôi thực hiện một kịch bản git pull vỏ trong kho lưu trữ mã của tôi và sau đó thực thi kịch bản.

Vấn đề là, git pull dường như không chạy khi một phiên bản khởi động, nhưng tập lệnh python chỉ chạy tốt. Bạn không chắc chắn những gì tôi đang mất tích ... đây là kịch bản khởi động:

#!/bin/bash 
# 
# ec2 Startup script for EC2 machines 
# 
# chkconfig: 345 99 02 
# description: Script used to issue startup and shutdown commands. 
# 

if [ "$1" = "start" ]; then 
/usr/scripts/code/git_latest 
python /usr/scripts/code/process.py 
exit 
fi 

if [ "$1" = "stop" ]; then 
#nothing 
exit 
fi 

Vỏ kịch bản /usr/scripts/code/git_latest trông như thế này:

#pulls in the latest code from the repository 
cd /usr/scripts/code 
sudo git pull 

Nên kéo xuống process.py kịch bản mới nhất.

Điều kỳ lạ là nếu tôi ssh vào cá thể của mình và thực thi tập lệnh khởi động theo cách thủ công (/etc/init.d/nt_startup "start"), thì tập lệnh git sẽ hoạt động tốt.

Tôi có thiếu gì đó không?

Trả lời

3

OK, cuối cùng tôi đã tìm ra. Sau khi cọ rửa đầu ra EC2 tôi thấy dòng này:

"Bắt đầu từ ntstartup: sudo: xin lỗi, bạn phải có một tty để chạy sudo"

Rõ ràng Fedora khóa ra lệnh không tty sudo.

Một tìm kiếm nhanh chóng dẫn đến giải pháp: "visudo"

  1. Như chạy gốc
  2. Tìm dòng với "Default requiretty" và nhận xét nó ra (#default requiretty)

Hy vọng điều này là hữu ích cho bất kỳ ai khác chạy vào vấn đề này.

+2

Tại sao bạn sử dụng sudo? Các tập lệnh khởi động chạy dưới dạng root. – tylerl

0

Bạn phải đặt liên kết khởi động trong /etc/rc?.d. Bạn có thể sử dụng chkconfig (8) hoặc ntsysv (8) để giúp bạn quản lý các thư mục này.

+0

Kịch bản lệnh process.py đang được thực thi lúc khởi động ... vì vậy tôi không nghĩ đó là vấn đề. Nó chỉ là "git pull" không được thực hiện. – Mark

+0

BTW, tôi đã làm các đề xuất trên (# chkconfig: 345 99 02) và vẫn không có may mắn ... Tôi có thể nghĩ là cuộc gọi git là không vì mạng đã không được khởi tạo hoặc cái gì? – Mark

Các vấn đề liên quan