Systemd용 시작 스크립트를 작성하는 방법은 무엇입니까?

Systemd용 시작 스크립트를 작성하는 방법은 무엇입니까?

내 노트북에는 그래픽 카드가 2개 있다. 하나는 IGP이고 다른 하나는 이산형입니다.

개별 그래픽 카드를 끄는 쉘 스크립트를 작성했습니다.

시작할 때 실행하기 위해 이것을 시스템 스크립트로 어떻게 변환할 수 있습니까?

답변1

이를 수행하는 방법에는 주로 두 가지가 있습니다.

스크립트 포함

스크립트를 실행해야 하는 경우 변환할 필요가 없습니다. 대신 서비스를 통해 스크립트를 실행하세요 systemd.

따라서 스크립트와 .service파일(유닛 구성 파일)이라는 두 개의 파일이 필요합니다.
스크립트가 실행 가능하고 첫 번째 줄(셰르본) 예 #!/bin/sh. 그런 다음 .service파일 /etc/systemd/system(일반 텍스트 파일이라고 함 )을 만듭니다 vgaoff.service.
예를 들어:

  1. 스크립트:/usr/bin/vgaoff
  2. 유닛 파일:/etc/systemd/system/vgaoff.service

이제 유닛 파일을 편집합니다. 내용은 스크립트 작동 방식에 따라 다릅니다.

vgaoff예를 들어 GPU의 전원을 끄는 경우 :

exec blah-blah pwrOFF etc 

그러면 내용은 다음 vgaoff.service과 같아야 합니다.

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff

[Install]
WantedBy=multi-user.target

vgaoffGPU 전원을 끄고 GPU 전원을 다시 켜는 데 사용되는 경우 , 예를 들면 다음과 같습니다.

start() {
  exec blah-blah pwrOFF etc
}

stop() {
  exec blah-blah pwrON etc
}

case $1 in
  start|stop) "$1" ;;
esac

그러면 내용은 다음 vgaoff.service과 같아야 합니다.

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff start
ExecStop=/usr/bin/vgaoff stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

스크립트 없음

가장 간단한 경우에는 스크립트를 건너뛰고 명령을 직접 실행할 수 있습니다.

전원을 끄십시오:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"

[Install]
WantedBy=multi-user.target

전원을 끄고 켜려면:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
ExecStop=/bin/sh -c "echo ON > /whatever/vga_pwr_gadget/switch"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

서비스 활성화

파일을 완성한 후 서비스를 활성화합니다.

systemctl enable vgaoff.service

다음 부팅 시 자동으로 시작됩니다. 서비스를 한 번 활성화하고 시작할 수도 있습니다.

systemctl enable --now vgaoff.service

현재 systemd v.220(이전 설정에서는 수동으로 시작해야 함)
자세한 내용은 다음을 참조하세요.systemd.service맨 페이지.

문제 해결

답변2

systemd에 시작 항목을 추가하는 것은 복잡하고 지루합니다. 이것을 더 편리하게 만들기 위해 도구를 작성했습니다.서비스 추가systemd에 시작 항목을 빠르게 추가하는 쉬운 방법을 제공합니다.

설치하다:

pip3 install add_service

용법:

python -m add_service [shell_file/cmd] [user (default `whoami`)]

예:

python -m add_service ssh_nat.sh  # by default user is `whoami`
python -m add_service "`which python3` -m http.server 80" root

관련 정보