Điểm:0

Làm cách nào để tạo tệp đơn vị mẫu "bắt đầu tất cả" systemd từ tập lệnh mới bắt đầu với nhiều dịch vụ?

lá cờ jp

Tôi đang trong quá trình di chuyển tất cả các tập lệnh khởi động tùy chỉnh sang systemd. Tôi đã bắt gặp một tập lệnh sử dụng nhiều dịch vụ. Tôi không thể tìm ra cú pháp thích hợp để xử lý việc này hoặc nếu tôi cần tạo riêng .dịch vụ tập tin đơn vị cho mỗi. Điều này có thể cho khuôn mẫu? Các Tài liệu đơn vị SystemD không cung cấp cho tôi nhiều thông tin, ngoại trừ cách tạo tệp mẫu (nối thêm @ sang tên) và cách sử dụng %tôi để biểu thị một trường hợp.

người mới nổi ban đầu đại lý-bắt đầu-all.conf

nhật ký giao diện điều khiển
bắt đầu từ đại lý-bắt đầu
kịch bản
    khai báo -a đại lý=("TimeZone" "Timeout" "Inquiry" "Refuse")

    để nhập "${dealers[@]}"
    làm
        nếu danh sách initctl | grep "^đại lý ($type)"
        sau đó
            dừng loại đại lý=$type
        fi
        bắt đầu loại đại lý=$type
        tiếng vang "đại lý $type bắt đầu"
    xong
kịch bản kết thúc

Phần khác của nó, đại lý.conf, nên được cắt và làm khô bằng cách sử dụng %tôi bên trong ExecStart phần, như:

ExecStart=/usr/bin/php -f /path/to/dealer%i.php

nhật ký giao diện điều khiển

ví dụ $type

dừng lại ở đại lý-dừng

kịch bản
        sudo -u root php -f /path/to/dealer$type.php
kịch bản kết thúc

kịch bản dừng sau

nếu [ -z "$UPSTART_STOP_EVENTS" ]
    sau đó
        echo "dealer$type stopped at `date +"%F %T.%N"` Chạy 'initctl phát ra điểm dừng của đại lý' sau đó 'initctl phát ra điểm bắt đầu của đại lý' trên `tên máy chủ` để chạy lại." | mail -s "dealer$type Stopped" [email protected]
    khác
        echo "dealer$type đã bị dừng thủ công tại `date +"%F %T"`."
fi
kịch bản kết thúc

Tôi chỉ không hiểu cách dịch mảng trong phiên bản đầu tiên thành phiên bản systemd? Tôi có nên chia chúng thành các tệp đơn vị riêng lẻ không? Nếu vậy, thì đó không phải là vấn đề và có thể dễ dàng thực hiện. Tôi chỉ không chắc về cú pháp (nếu nó tồn tại) để làm những gì cú pháp đầu tiên đang làm.

Điểm:0
lá cờ cz

Mẫu đơn vị systemd là một mẫu. Bạn sẽ không đặt mảng trong đó.Thay vào đó bạn sẽ khởi tạo nó cho từng trường hợp bạn muốn, ví dụ:

systemctl kích hoạt đại lý @ TimeZone
systemctl kích hoạt đại lý @ Hết giờ
...

Ở đâu %tôi xuất hiện trong mẫu sẽ được thay thế bằng những gì bạn đã chỉ định.

Bạn cũng không thể sử dụng %tôi trong tên nhị phân Trong ExecStart=. Nó phải là một con đường tồn tại, và %tôi được sử dụng trong các lập luận của nó. Ví dụ:

ExecStart=/usr/bin/php -f /path/to/dealer%i.php
DevOpsSauce avatar
lá cờ jp
Cảm ơn bạn. Tôi có phần /usr/bin/php nhưng quên nhập nó vào câu hỏi của mình. Tôi sẽ thử điều này và quay lại chấp nhận.
DevOpsSauce avatar
lá cờ jp
Tôi đã thử bật một cái với `systemctl enable dealer@TimeZone` và nhận được lỗi: "Tệp đơn vị không có cấu hình cài đặt (WantedBy, RequredBy, Ngoài ra, cài đặt Bí danh trong phần [Cài đặt] và DefaultInstance cho đơn vị mẫu).
Michael Hampton avatar
lá cờ cz
@IRGeekSauce Chà, đó là một vấn đề hoàn toàn không liên quan.
DevOpsSauce avatar
lá cờ jp
Đã thêm `[Install] WantedBy=multi-user.target` và không có lỗi vào thời điểm đó. Bây giờ trở lại nhiệm vụ ban đầu trong tầm tay.
DevOpsSauce avatar
lá cờ jp
Tôi đã làm điều đó để làm việc. Tôi đã thêm tệp `dealers.target` với `Requires=dealer-names-here`. Vẫn chưa hoàn toàn chắc chắn về tất cả những điều này, nhưng điều này ít nhất đã được trả lời bằng câu hỏi ban đầu. Cảm ơn sự giúp đỡ của bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.