다양한 인수로 여러 서비스 실행

다양한 인수로 여러 서비스 실행

서비스로 실행하려는 일부 데이터를 처리하기 위해 Python 스크립트를 만들었습니다. 스크립트는 데이터를 처리한 다음, 들어오는 새 데이터를 처리하기 위해 잠시 동안 휴면 상태를 유지합니다.

내 문제는 처리하려는 몇 가지 다른 데이터 소스가 있고 한 번에 하나의 데이터 소스를 처리하도록 스크립트가 작성되므로 서비스의 여러 인스턴스를 실행하고 싶다는 것입니다.

이 작업을 수행하는 몇 가지 다른 방법이 있습니다.

모든 데이터 소스를 처리하도록 스크립트를 다시 작성할 수 있습니다. 이렇게 하면 임시 용도로 사용할 수 없게 되고 추가되거나 제거된 소스를 자동 검색할 수 없기 때문에 데이터 소스 세트를 업데이트하기가 더 어려워집니다. 그래서 가능하더라도 이것은 나에게 가장 불리한 선택입니다.

처리하려는 데이터 소스에 대한 스크립트를 시작하는 래퍼 스크립트를 bash 또는 Python으로 만들 수 있습니다. 이것도 좀 엉성한 느낌이 듭니다.

각 데이터 소스에 대해 하나의 단위 파일을 만들 수 있으며, 각각은 적절한 인수를 사용하여 처리 스크립트를 호출합니다. 이렇게 하면 여러 시스템 파일(예:processing_ds1.system,processing_ds2.system 등)이 제공됩니다. 나에게는 이것이 가능한 방법처럼 느껴집니다. 그렇게 하지 말아야 할 타당한 이유가 있는 경우를 제외하고.

내가 선호하는 방법은 각 데이터 소스에 대한 인수를 사용하여 호출하거나 시스템 파일 내의 모든 인스턴스를 시작할 수 있는 하나의 시스템 파일을 만드는 것입니다.

그래서 두 가지 대안이 있습니다.

유닛 파일에 인수를 사용하는 것이 어떻게 가능합니까? 나는 postgresql이 @를 사용하여 다른 버전을 시작할 수 있다는 것을 보았습니다. 즉,

systemctl start postgres@12-main

클러스터 12-main을 시작합니다. 그런데 이것이 어떻게 이루어지나요? postgresql에 대한 관리 단위 파일을 찾을 수 없습니다.

또는

하나의 단위 파일에서 여러 서비스를 시작하는 것이 가능하고 조언할 수 있습니까?

답변1

템플릿 단위 파일을 사용할 수 있습니다.systemd.unit

예를 들어 OpenVPN의 경우: 다음 내용이 [email protected]포함된 이름의 단위 파일을 생성할 수 있습니다 ./etc/systemd/system

[Unit]
Description=OpenVPN connection to %i
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/%i.conf
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

systemd를 실행할 때마다 systemctl start openvpn@myconfig "myconfig"를 단위 파일의 %i로 대체합니다. 따라서 /usr/sbin/openvpn --config /etc/openvpn/myconfig.conf를 실행합니다.

관련 정보