Điểm:0

Làm cách nào để chuyển các biến cho tệp đơn vị systemd gọi tập lệnh php?

lá cờ jp

Tôi cần tạo nhiều phiên bản của dịch vụ systemd. Có thể chuyển tham số khi bắt đầu dịch vụ, đó sẽ là tham số cho tập lệnh php không?

Ví dụ: giả sử tôi có một kịch bản, test_systemd.php, với hai tham số, chế độcòn lại tương ứng.

Php:

<?php
$val = getopt(null, ['mod:','rem:']);
echo $val['mod']."\n";
echo $val['rem']."\n";
echo "\n";

?>

Nếu tôi chạy nó qua php, tôi chỉ cần làm php test_systemd.php --mod foo --rem bar

Điều gì sẽ vang vọng ra ngoài

foo
quán ba

Theo tài liệu systemd, tôi phải sử dụng Môi trường=, nhưng tôi không chắc làm thế nào để làm điều đó. Giả sử tôi có một tệp đơn vị systemd có tên kiểm tra-systemd-params.service:

Mô tả=Kiểm tra thông số hệ thống
Muốn=mạng-online.mục tiêu
Sau=mạng-online.đích

[Dịch vụ]
ExecStart=/usr/bin/php -f /path/to/test_systemd.php
StandardOutput=file:/var/log/test-multiple-systemd.log
Môi trường =???? <--- GÌ ĐI ĐÂY?

[Cài đặt]
#Bắt đầu sau khi khởi động
WantedBy=multi-user.target

Tôi không hiểu những gì tôi cần tp đặt ở đây. Điều đó thậm chí có thể xảy ra đối với hai thông số (chế độcòn lại) có được thông qua khi bắt đầu một phiên bản của dịch vụ không?

tôi đã tìm thấy cái này ví dụ, và nó có hai Môi trường dòng, nhưng một trong số chúng là giá trị tĩnh! tôi cần hai các giá trị động, như:

Môi trường=mod=%i Môi trường=rem=%i

Đoạn ví dụ trông giống như:

[Dịch vụ]
Gõ=thông báo
Môi trường=LANG=C <--- TĨNH, nhưng cần động khác
Môi trường=HTTPD_INSTANCE=%i <--- năng động, tuyệt vời, nhưng cần một cái khác
ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-%i
ExecStartPre=/bin/chown root.apache /run/httpd/instance-%i
ExecStartPre=/bin/mkdir -m 700 -p /var/lib/httpd/instance-%i
ExecStartPre=/bin/chown apache.apache /var/lib/httpd/instance-%i
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND -f conf/%i.conf
ExecReload=/usr/sbin/httpd $OPTIONS -k duyên dáng -f conf/%i.conf
Chris avatar
lá cờ it
Đoạn mã ví dụ bạn cung cấp đề cập đến [mẫu dịch vụ](https://www.freedesktop.org/software/systemd/man/systemd.service.html#Service%20Templates). Bạn chỉ có thể chuyển một *biến* theo cách này *Các dịch vụ systemd có thể lấy một đối số duy nhất thông qua cú pháp "[email protected]".*
DevOpsSauce avatar
lá cờ jp
Vì vậy, tôi không thể có hai đối số cho tập lệnh php?
Điểm:0
lá cờ it

Theo tài liệu systemd, tôi phải sử dụng Môi trường=, nhưng tôi không chắc chắn làm thế nào để làm điều đó. Giả sử tôi có tệp đơn vị systemd gọi điện kiểm tra-systemd-params.service:

Đây là một ví dụ sử dụng Môi trường=

Mô tả=Kiểm tra thông số hệ thống
Muốn=mạng-online.mục tiêu
Sau=mạng-online.đích

[Dịch vụ]
Môi trường="MOD=foo" "REM=bar"
ExecStart=/usr/bin/php -f /path/to/test_systemd.php --mod ${MOD} --rem ${REM}
StandardOutput=file:/var/log/test-multiple-systemd.log

[Cài đặt]
#Bắt đầu sau khi khởi động
WantedBy=multi-user.target

Đây không phải là những gì bạn đang tìm kiếm vì các biến là giá trị tĩnh.


tôi đã tìm thấy cái này ví dụ, và nó có hai Môi trường dòng, nhưng một trong số chúng là giá trị tĩnh! tôi cần hai các giá trị động, như:

Đoạn ví dụ bạn đưa ra đề cập đến mẫu dịch vụ. Bạn có thể vượt qua chỉ có một biến cách này. Các dịch vụ systemd có thể lấy một đối số thông qua cú pháp "[email protected]".

Đây là một ví dụ thực hiện

Mô tả=Kiểm tra thông số hệ thống
Muốn=mạng-online.mục tiêu
Sau=mạng-online.đích

[Dịch vụ]
Môi trường=MOD=%i
Môi trường=REM=thanh
ExecStart=/usr/bin/php -f /path/to/test_systemd.php --mod ${MOD} --rem ${REM}
StandardOutput=file:/var/log/test-multiple-systemd.log

[Cài đặt]
#Bắt đầu sau khi khởi động
WantedBy=multi-user.target

Sau đó, bạn bắt đầu các dịch vụ như thế này:

systemctl start [email protected]
systemctl start [email protected]

Vì vậy, nó vẫn không chính xác như những gì bạn đang tìm kiếm, bởi vì bạn vẫn có một biến tĩnh.


Cách duy nhất tôi thấy (chưa kiểm tra) để vượt qua nhiều biến sẽ được sử dụng Tệp môi trường = các tệp cấu hình chỉ thị và được phân tách bằng năng động tên bằng cách sử dụng @tranh luận tổng hợp.

[Dịch vụ]
Môi trườngFile=/path/to/config/%i
ExecStart=/usr/bin/php -f /path/to/test_systemd.php --mod ${MOD} --rem ${REM}
StandardOutput=file:/var/log/test-multiple-systemd.log

Tệp cấu hình ví dụ trong /đường dẫn/đến/cấu hình/, hãy cùng nói nào conf1:

MOD=foo
REM=thanh

Sau đó, bạn bắt đầu các dịch vụ như thế này:

systemctl start [email protected]
systemctl start [email protected]
...

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