Điểm:1

Không thể truy cập tham số Systemd ExecStart bên trong tập lệnh

lá cờ in

Tôi có một tình huống rất kỳ lạ.

Tôi có một đơn vị systemd

[Đơn vị]
Mô tả=Công việc sao lưu ảnh chụp nhanh hàng đêm cho tập [%i]

[Dịch vụ]
Loại = đơn giản
KillMode=tiến trình
Môi trườngFile=/etc/systemd/schedule-backup_%i.conf
ExecStart=/usr/local/bin/backup.sh -s '$SOURCE' -b '$BACKUP' -t '$TITLE' -l 'backup_%i.log'

Khi tôi thực hiện điều đó với phiên bản dịch vụ: Sudo systemctl start [email protected]

tập lệnh backup.sh hoàn toàn không nhận được tham số cuối cùng. Nó sẽ nhận được "backup_projects.log"

Tôi đang đọc các thông số với

trong khi getopts s:b:t:l: cờ
làm
    trường hợp "${flag}" trong
        s) source_path_root="${OPTARG}";;
        b) backup_path_root="${OPTARG}";;
        t) email_title="${OPTARG}";;
        l) log_name="${OPTARG}";;
    thoát hiểm
xong

khi tôi kiểm tra nhật ký dịch vụ, có vẻ như tập lệnh được gọi với các tham số thích hợp:

systemctl -l status [email protected] -n50

â [email protected] - Công việc sao lưu ảnh chụp nhanh hàng đêm cho khối lượng [dự án]
     Đã tải: đã tải (/etc/systemd/system/[email protected]; tĩnh)
     Đang hoạt động: không hoạt động (đã chết) kể từ Thứ Ba 2021-12-14 12:47:01 EET; 16 phút trước
TriggeredBy: â schedule-backup_projects.timer
    Quá trình: 8161 ExecStart=/usr/local/bin/backup.sh -s $SOURCE -b $BACKUP -t $TITLE -l backup_projects.log (code=exited, status=0/SUCCESS)
   PID chính: 8161 (mã=đã thoát, trạng thái=0/THÀNH CÔNG)
        CPU: 3.122 giây

Ngày 14 tháng 12 12:46:56 Falling-robot systemd[1]: Đã bắt đầu công việc sao lưu ảnh chụp nhanh hàng đêm cho tập [dự án].
Ngày 14 tháng 12 12:46:56 Falled-robot backup.sh[8161]: /usr/local/bin/backup.sh: dòng 37: /var/log/: Là một thư mục
Ngày 14 tháng 12 12:46:56 Falled-robot backup.sh[8161]: Tệp nhật ký được đặt thành /var/log/

Khi tôi thực thi cùng một tập lệnh từ bảng điều khiển, tham số được chấp nhận tốt. Tôi đang làm gì sai?

CHỈNH SỬA: Có vẻ như nó đã hoạt động khi tôi đặt tham số -l ở đầu thay vì ở cuối. Có thể là một số vấn đề với getopts. Tôi sẽ chấp nhận câu trả lời từ bất cứ ai có thể giải thích điều này

Điểm:1
lá cờ in

Tôi đã tìm thấy sự cố, systemd đang có các quy tắc riêng cho các biến từ Tệp môi trường

https://fedoraproject.org/wiki/Packaging:Systemd#EnvironmentFiles_and_support_for_.2Fetc.2Fsysconfig_files

Nó nói rằng

Sau đó, bạn có thể tham khảo các biến được đặt trong tệp /etc/sysconfig/httpd với ${FOOBAR} và $FOOBAR, trong các dòng ExecStart= (và các dòng liên quan dòng). (${FOOBAR} mở rộng biến thành một từ, $FOOBAR tách tăng giá trị biến ở khoảng trắng thành nhiều từ)

Sau khi tôi thay đổi dòng của mình thành

ExecStart=/usr/local/bin/backup.sh -s ${SOURCE} -b ${BACKUP} -t ${TITLE} -l backup_%i.log

Sự cố của tôi đã biến mất, kể cả sự cố có TITLE chứa khoảng trắng. Nếu không có {} TITLE được mở rộng thành 3 từ và vì từ thứ hai và thứ ba xuất hiện mà không có '-' cho getopts, nó sẽ ngừng xử lý tham số tiếp theo và do đó bỏ qua phần -l backup_%i.log

getopts thực hiện xử lý tùy chọn tiêu chuẩn, có nghĩa là nó ngừng tìm kiếm các tùy chọn khi nó thấy một đối số không phải một lựa chọn ...

lịch sự của https://unix.stackexchange.com/a/666748/499351

Đă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.