Làm cách nào để làm cho tập lệnh dữ liệu người dùng EC2 chạy lại khi khởi động?


19

Sau khi cloud-init chạy tập lệnh dữ liệu người dùng trong lần khởi động đầu tiên của phiên bản EC2, một tệp trạng thái có lẽ được viết để đám mây init sẽ không chạy lại tập lệnh trong các lần khởi động lại tiếp theo. Có những trường hợp tôi muốn xóa tệp trạng thái này để tập lệnh dữ liệu người dùng sẽ chạy lại. Nó đâu rồi?

Câu trả lời:


24

rm /var/lib/cloud/instances/*/sem/config_scripts_user

Xác nhận làm việc trên:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

Để hoàn thiện, nếu bạn gặp phải tình huống phải theo dõi thực tế / khả năng AMI này [có AMI gốc mà ...] và tất cả họ đều chạy cloud-initdữ liệu người dùng, bạn chỉ có thể xóa semaphore hiện tại.

rm /var/lib/cloud/instance/sem/config_scripts_user


2
Bạn đã tìm ra điều đó một cách nhanh chóng.
c24w

9
@ c24w Những dấu thời gian đó là sai lệch. Nó thực sự khiến tôi mất vài giờ nghiên cứu và thử nghiệm, vì vậy một khi tôi đã tìm ra nó, tôi đã tạo ra câu hỏi này để giúp người tiếp theo tìm kiếm một câu trả lời dứt khoát.
Mike

1
Tôi đã bắt gặp điều này kể từ đó và không nhận ra rằng nó được khuyến khích đăng Q & As kiểu wiki. Đánh giá cao bạn tài liệu này!
c24w

1
Tôi rất vui vì điều này đã được khuyến khích trên serverfault. Tôi đã thấy nó bị hạ cấp nhiều lần trên SO
thẳng thắn

1
@ flag5 Điều đó curlđối với dịch vụ siêu dữ liệu để lấy id cá thể hiện tại là không cần thiết vì /var/lib/cloud/instanceđã là một liên kết tượng trưng đến thể hiện hiện tại bên dưới /var/lib/cloud/instances. :-)
Mike

2

Bạn có thể đặt tập lệnh của mình vào /etc/rc.local, tập lệnh này sẽ chạy tập lệnh trên mỗi lần khởi động lại.


/etc/rc.localkhông có gì để làm với dữ liệu người dùng EC2.
Mike

@MikeConigliaro Tôi muốn sử dụng dữ liệu người dùng để làm cho một cái gì đó chạy trên mỗi lần khởi động, vì vậy tôi đã tạo tập lệnh dữ liệu người dùng nối nó vào /etc/rc.local.
dùng253751

0

Bạn cũng có thể định cấu hình dữ liệu người dùng của mình để chạy lại trên mỗi lần khởi động, thay vì xóa tệp trạng thái. Bạn phải sử dụng cloud_final_modulestrong tập lệnh userdata của mình để chạy lại tập lệnh userdata và để bạn phải tùy chỉnh uderdata để có các tập tin miultipl trong userdata. Ví dụ tệp userdata sẽ như sau:

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "Hello World" >> /tmp/userdata-test.txt
--//

Điều này sẽ làm cho tập lệnh userdata thực thi ở bước cuối cùng của mỗi quá trình khởi động. Ở đây chỉ có một dòng duy nhất bin/echo "Hello World" >> /tmp/userdata-test.txtđược thực thi, thay thế dòng này bằng tập lệnh shell của bạn cần được thực thi mỗi khi máy được khởi động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.