일시중단/재개를 위한 시스템 단위 파일 작성

일시중단/재개를 위한 시스템 단위 파일 작성

시스템을 부팅할 때마다 다음을 입력합니다.

# su
Password:
# hciattach -s 152000 /dev/ttyS1 billionton

이것은 내 BT 마우스를 초기화하는 데 필요한 것입니다. 일시 중지에서 다시 시작한 후 다음을 입력해야 합니다.

# su
Password:

hciattach PID를 찾아 종료하세요.

# pkill hciattach
# hciattach -s 152000 /dev/ttyS1 billionton

이제 두 개의 스크립트를 작성했습니다.

# cat bt-mouse-suspend.service 
[Unit]
Description=BT Mouse suspend helper
Before=sleep.target

[Service]
Type=simple
ExecStart=-/usr/bin/pkill hciattach

[Install]
WantedBy=sleep.target

# cat bt-mouse-resume.service 
[Unit]
Description=BT Mouse resume helper
After=suspend.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/hciattach -s 152000 /dev/ttyS1 billionton

[Install]
WantedBy=suspend.target
# systemctl status bt-mouse-resume
● bt-mouse-resume.service - BT Mouse resume helper
   Loaded: loaded (/etc/systemd/system/bt-mouse-resume.service; enabled; vendor preset: disabled)
   Active: active (exited) since Mon 2017-04-03 22:09:50 EEST; 12min ago
 Main PID: 6386 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 4915)
   CGroup: /system.slice/bt-mouse-resume.service

apr   03 22:09:50 Twinh systemd[1]: Started BT Mouse resume helper.
apr   03 22:09:51 Twinh hciattach[6386]: Device setup complete
# pgrep hciattach
#

정지 스크립트는 제대로 작동하고 예상한 내용을 종료합니다. 그러나 이력서 hciattach는 일단 실행되면 사라집니다.

답변1

After당신이 말하는 내용이 혼동되어 After서비스가 시작되기 전에 다른 장치를 기다리게 됩니다. 당신 Wanted-By=suspend.targetAfter=suspend.target당신은 서로 상충됩니다.

Wanted-By이를 선언하는 것은 bt-mouse-resume.service프로세스의 일부이지만 suspend.target선언 After은 완료될 bt-mouse-resume.service때까지 기다려야 합니다 suspend.target. 서비스는 대상의 일부가 아니어야 하며 시작하기 전에 해당 대상을 기다려야 합니다. 이는 suspend.target종료 시가 아닌 시작 시 서비스가 실행되도록 구성한다는 의미이기도 합니다 .

당신이 정말로 찾고 있는 것은 중지된 동안 무언가를 실행하는 방법이므로 suspend.target다음 중 매우 중요한 부분을 알려 드리겠습니다 systemd.

순차 종속성을 갖는 두 장치가 종료되면 시작 순서가 반대가 됩니다.

인용하다

그래서 당신은 당신의 것이 bt-mouse-suspend.service잘 작동한다고 말합니다. Wanted-By=sleep.target이로 인해 sleep.target서비스가 시작될 때 실행됩니다. 반대로 sleep.target멈추면 bt-mouse-suspend.service멈추게 됩니다 . 이 서비스에는 필드가 필요하지 않습니다 Before. 서비스를 해당 대상에 대한 작업으로 만들었습니다.

따라서 /usr/bin/hciattach -s 152000 /dev/ttyS1 billionton휴가를 내고 싶다면 .sleep.targetExecStopbt-mouse-suspend.service

또한 이것이 어떻게 작동하는지 자세히 읽어볼 것을 권장합니다 systemd. 즉, 다음을 살펴보세요.

https://www.freedesktop.org/software/systemd/man/systemd.service.html#

https://www.freedesktop.org/software/systemd/man/systemd.unit.html#

https://www.freedesktop.org/software/systemd/man/systemd.target.html#

또한 두 가지 서비스 목표는 suspend.target및 입니다 sleep.target. 분명히 실제로 관심 있는 대상이 무엇이든 사용해야 하지만 단지 suspend.target.

관련 정보