서비스로 실행하려는 일부 데이터를 처리하기 위해 Python 스크립트를 만들었습니다. 스크립트는 데이터를 처리하고 있다가 들어오는 새 데이터를 처리하기 위해 잠시 대기합니다.
내 문제는 처리할 데이터 원본이 여러 개 있고 스크립트가 한 번에 하나의 데이터 원본을 처리하도록 되어 있기 때문에 서비스의 여러 인스턴스를 실행하고 싶다는 것입니다.
나는 몇 가지 다른 접근 방식을 보았습니다.
모든 데이터 소스를 처리하도록 스크립트를 다시 작성할 수 있습니다. 이렇게 하면 임시 용도로 사용할 수 없게 되고, 추가되거나 제거된 소스를 자동으로 검색할 수 없기 때문에 데이터 소스 세트를 업데이트하는 것이 더 어려워집니다. 가능하더라도 그것은 내가 가장 좋아하지 않는 옵션입니다.
처리하려는 데이터 소스에 대한 스크립트를 시작하는 래퍼 스크립트를 bash 또는 Python으로 만들 수 있습니다. 좀 투박한 느낌도 듭니다.
각 데이터 소스에 대한 단위 파일을 생성할 수 있으며 각 단위 파일은 적절한 매개변수를 사용하여 처리 스크립트를 호출합니다. 그러면 여러 시스템 파일(예:processing_ds1.system,processing_ds2.system 등)이 제공됩니다. 나에게는 이것이 그렇게 하지 않을 타당한 이유가 없는 한 가능한 방법처럼 느껴집니다.
내가 선호하는 접근 방식은 각 데이터 소스에 대한 매개 변수를 사용하여 호출할 수 있거나 시스템 파일의 모든 인스턴스에 대해 시작할 수 있는 시스템 파일을 만드는 것입니다.
따라서 두 가지 옵션이 있습니다.
유닛 파일에서 매개변수를 사용하는 방법은 무엇입니까? @를 사용하여 postgresql을 다른 버전으로 시작할 수 있다는 것을 보았습니다.
systemctl start postgres@12-main
클러스터 12-메인을 시작합니다. 그런데 이것이 어떻게 이루어지나요? postgresql에 유용한 단위 파일을 찾을 수 없습니다.
또는
하나의 유닛 파일에서 여러 서비스를 시작하는 것이 가능하고 권장됩니까?
답변1
템플릿 단위 파일을 사용할 수 있습니다.시스템 장치
OpenVPN을 예로 들어 보겠습니다. 다음 콘텐츠로 [email protected]
이름이 in인 유닛 파일을 생성할 수 있습니다./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
유닛 파일의 %i가 "myconfig"로 대체됩니다. 따라서 /usr/sbin/openvpn --config /etc/openvpn/myconfig.conf를 실행합니다.