Tin tức và phân tích của tất cả các thiết bị di động

lỗi định dạng exec” trên Linux

Sau khi hoàn thành một dự án lớn, bạn và nhóm của mình đã quyết định cất giữ toàn bộ dự án trong quá trình phát triển và sản xuất để tránh các vấn đề về môi trường và tuyên bố “nó hoạt động trên máy tính của tôi” vào phút cuối. Nhưng trong khi tạo vùng chứa, bạn gặp phải “quy trình người dùng thực thi gây ra lỗi định dạng thực thi” và không biết cách khắc phục. Đừng lo lắng vì chúng tôi ở đây để giúp đỡ. Trong hướng dẫn này, chúng tôi sẽ giải thích các nguyên nhân có thể gây ra sự cố này, cùng với một số cách khắc phục đáng tin cậy để giải quyết “quy trình người dùng thực thi do: lỗi định dạng thực thi” trên Linux.

Khắc phục “quy trình người dùng thực thi gây ra: lỗi định dạng thực thi” (2023)

Nguyên nhân gây ra “quy trình người dùng thực thi gây ra: lỗi định dạng thực thi”

Nguyên nhân phổ biến nhất của “quy trình được gọi là người dùng exec: lỗi định dạng exec” là thiếu tiêu đề tập lệnh, chẳng hạn như #!/bin/bash. Điều này dẫn đến việc vùng chứa chuyển sang giai đoạn chờ xử lý do CrashLoopBackOff khi cố gắng khởi động nó. Sau khi kiểm tra các tệp nhật ký của vùng chứa, bạn sẽ tìm thấy tên chính xác của lỗi là Standard_init_linux.go:300: exec user process gây ra “lỗi định dạng exec”.

Ngoài lý do nêu trên, có thể còn có những nguyên nhân khác khiến lỗi này xảy ra khi làm việc với container:

  • Sử dụng tiêu đề tập lệnh sai, ví dụ: thêm khoảng trắng ở giữa.
  • Sử dụng một số bảng mã ký tự không tương thích khi viết tập lệnh
  • Kiến trúc bộ xử lý không tương thích
  • Không có quyền tập tin
  • Đây không phải là danh sách đầy đủ các nguyên nhân có thể gây ra lỗi này nhưng chúng tôi đã liệt kê các nguyên nhân phổ biến nhất. Điều đó nói lên rằng, đây là những giải pháp tốt nhất 5để khắc phục sự cố trên PC Linux.

    Cách khắc phục “quy trình người dùng thực thi gây ra lỗi định dạng thực thi”

    Khi viết bất kỳ tập lệnh nào bằng ngôn ngữ thông dịch, bạn nên sử dụng tiêu đề tập lệnh. Nó báo cho shell sử dụng trình thông dịch này. Bạn có thể coi tiêu đề tập lệnh là điểm vào cho tập lệnh của mình. Một số điều cần lưu ý khi sử dụng tiêu đề tập lệnh:

    • Tiêu đề tập lệnh phải bắt đầu bằng shebang (#!).
    • Tiêu đề không được chứa dấu cách hoặc bất kỳ ký tự đặc biệt nào khác.
    • Sử dụng các tiêu đề thích hợp cho ngôn ngữ lập trình bạn đang làm việc và tiêu đề cũng phải tương ứng với tập lệnh và bản phân phối cụ thể của bạn. Ví dụ: nếu bạn đang sử dụng python 3.x trong bản phân phối dựa trên Debian, hãy sử dụng tiêu đề tập lệnh sau:

    #!/bin/python3

    Khi sử dụng Alpine Linux, người dùng có xu hướng sử dụng cùng các tiêu đề tập lệnh bash được sử dụng trong các bản phân phối Linux khác. Đối với Alpine Linux, nhiều người sử dụng tiêu đề tập lệnh sau:

    #!/thùng rác/tro

    2. Mã hóa ký tự không hợp lệ cho dòng mới

    Ký tự dòng mới có vẻ tầm thường và thường bị bỏ qua khi khắc phục sự cố, nhưng nó được biết đến là nguyên nhân sâu xa gây ra một số lỗi. Ký tự dòng mới được sử dụng để biểu thị “Cuối dòng” (EOL). Điều này được giải thích khác nhau bởi hệ thống Windows và Linux. Windows sử dụng CRLF (Nguồn cấp dữ liệu dòng trả về vận chuyển), diễn giải ký tự dòng mới là rn . Mặt khác, Linux sử dụng LF (Line Feed), diễn giải các dòng mới là n .

    Giả sử bạn đã viết một tập tin trên hệ thống của bạn Windows sử dụng mã hóa CRLF khi được gửi đến môi trường thử nghiệm hoặc sản xuất với Linux vì môi trường này sẽ dẫn đến lỗi định dạng thực thi. Vấn đề này có thể được giải quyết bằng một vài bước thực sự đơn giản:

    • Mở tệp trong bất kỳ trình soạn thảo văn bản Linux nào bạn chọn.
    • Sử dụng tìm và thay thế để tìm kiếm “rn” trước và thay thế bằng “n” ở tất cả các vị trí.
    • Ngoài ra, bạn thậm chí có thể đặt mã hóa linux trong khi viết mã thực tế.

    3. Kiến trúc không phù hợp

    Kiến trúc hệ thống không khớp cũng là một trong những nguyên nhân phổ biến nhất gây ra “quy trình người dùng thực thi được kích hoạt: lỗi định dạng thực thi”. Công nghệ container hóa được phát triển để giải quyết các vấn đề liên quan đến môi trường phần mềm chứ không phải phần cứng.

    Ví dụ: điều này thường xảy ra khi bạn làm việc trên các dự án trên hệ thống dựa trên ARM, chẳng hạn như chipset mới Apple Dòng M. Khi bạn tải mã lên môi trường sản xuất sử dụng x86, điều này sẽ gây ra “quy trình người dùng thực thi gây ra lỗi định dạng thực thi”. Điều này là do mỗi đoạn mã khi được chuyển đổi sang hướng dẫn cấp thấp hơn sẽ khác nhau đối với cả ARM và x86. Docker phát hiện nền tảng Apple M1 Pro là “linux/arm64/v8”. Để giải quyết vấn đề này, hãy sử dụng cú pháp docker sau khi tạo hình ảnh:

    docker buildx build –platform=linux/amd64 -t :-amd64 .

    Sau đó cập nhật câu lệnh “TỪ” của Dockerfile bằng cú pháp sau:

    Với –platform=linux/amd64 :

    Khi bạn làm theo hướng dẫn ở trên, hình ảnh của bạn sẽ được sửa đổi từ arm64 thành AMD64, giải quyết được vấn đề. Vui lòng cho chúng tôi biết nếu điều này khắc phục được sự cố khi triển khai Docker.

    4. Mã hóa tập lệnh không chính xác

    Mã hóa tập lệnh không chính xác không phải là một vấn đề phổ biến nhưng cũng được biết là nguyên nhân gây ra “quy trình người dùng thực thi gây ra lỗi định dạng thực thi”, đặc biệt là trên các máy đang chạy Windows. Khi bắt đầu viết tập lệnh, hãy đảm bảo mã hóa được đặt thành UTF-8. Nếu bạn đang sử dụng VS Code để viết tập lệnh, bạn có thể thay đổi cách mã hóa bằng cách thực hiện như sau:

    1. Mở tệp bạn muốn thay đổi mã hóa trong Mã VS.

    2. Chuyển đến menu “Tệp” ở góc trên bên trái và di chuột qua tùy chọn “Tùy chọn” trong menu thả xuống. Tại đây bạn cần chọn tùy chọn “Cài đặt” từ menu phụ. Ngoài ra, bạn có thể nhấn trực tiếp “CTRL + , (dấu phẩy)” trên bàn phím để truy cập menu Cài đặt. Thao tác này sẽ mở menu cài đặt trong một tab riêng.

    3. Trong thanh tìm kiếm, nhập “mã hóa” và nhấn Enter. Tại đây bạn sẽ thấy cài đặt “Tệp: Mã hóa” với menu thả xuống.

    4. Ở đây chọn UTF-8 từ trình đơn thả xuống. Điều này sẽ thay đổi định dạng mã hóa cho tất cả các tệp chung được mở hoặc sửa đổi bằng Mã VS.

    Nói chung, việc sử dụng phương pháp mã hóa UTF8 hoạt động cho hầu hết người dùng. Nhưng nếu vẫn gặp lỗi, bạn có thể thử thay đổi mã hóa thành UTF8 + BOM bằng cách thực hiện theo các bước tương tự như đã đề cập ở trên. Ở đây BOM là viết tắt của Byte Order Mark.

    Nếu bạn đang sử dụng vim hoặc trình soạn thảo văn bản dựa trên dòng lệnh khác, nó sẽ sử dụng định dạng mã hóa toàn hệ thống. Kiểm tra bài viết này về cách kích hoạt hỗ trợ UTF-8 trên Linux.

    5. Quyền không hợp lệ

    Quyền truy cập tệp thường bị bỏ qua khi làm việc trên một dự án. Quyền được chia thành ba loại – Đọc, Viết và Thực thi. Loại cuối cùng được chia thành ba loại người dùng – chủ sở hữu, người dùng và nhóm. Nói chung, nếu bạn chạy một tệp thực thi mà không có quyền thích hợp, bạn sẽ gặp lỗi “Quyền bị từ chối”. Nhưng khi chứa một dự án lớn, ngay cả một tệp không có quyền thực thi cũng có thể dẫn đến “quy trình người dùng thực thi gây ra lỗi định dạng thực thi”. Để kiểm tra quyền của từng tệp trong vùng chứa, hãy làm như sau:

    1. Đầu tiên, đi đến container bằng lệnh:

    cd

    2. Sau đó, để kiểm tra quyền của từng tệp trong thư mục, hãy sử dụng lệnh sau:

    ls-la

    3. Để thay đổi quyền truy cập tệp để thực thi quyền, hãy sử dụng cú pháp sau:

    chmod +x

    Giải quyết “gây ra quá trình người dùng thực thi: lỗi định dạng thực thi”

    Việc chia nhỏ các vấn đề lớn hơn thành các vấn đề nhỏ hơn có thể giúp giải quyết chúng một cách hiệu quả. Tại đây, chúng tôi đã chia sẻ một số nguyên nhân có thể gây ra “do quy trình người dùng thực thi: lỗi định dạng thực thi” cùng với các giải pháp của họ. Tôi hy vọng các giải pháp sẽ giúp bạn giải quyết được lỗi. Nếu bạn muốn tìm hiểu thêm về quyền đối với tệp, hãy xem bài viết của chúng tôi về quyền đối với tệp trong Linux. Nếu bạn gặp vấn đề trong việc khắc phục lỗi, hãy cho chúng tôi biết trong phần bình luận bên dưới.