Systemd 명령이 실패하는데 수동으로 실행할 수 있는 이유는 무엇입니까?

Systemd 명령이 실패하는데 수동으로 실행할 수 있는 이유는 무엇입니까?

문제 없이 셸에서 다음 명령을 실행할 수 있습니다.

sudo -u ktrl /home/andrew/.cargo/bin/ktrl -d /dev/input/event3

그러나 내가 봉사하려고 할 때:

/etc/systemd/system/ktrl.service

[Unit]
Description=ktrl

[Service]
User=ktrl
Environment=HOME=/opt/ktrl
ExecStart=/home/andrew/.cargo/bin/ktrl -d /dev/input/event3
  
[Install]
WantedBy=multi-user.target

다음 오류가 발생합니다.systemctl status ktrl.service

     Loaded: loaded (/etc/systemd/system/ktrl.service; enabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Sat 2020-06-27 10:35:08 EDT; 5s ago
    Process: 23335 ExecStart=/home/andrew/.cargo/bin/ktrl -d /dev/input/event3 (code=exited, status=203/EXEC)
   Main PID: 23335 (code=exited, status=203/EXEC)
        CPU: 5ms

Jun 27 10:35:08 localhost.localdomain systemd[1]: Started ktrl.
Jun 27 10:35:08 localhost.localdomain systemd[23335]: ktrl.service: Failed to execute command: Permission denied
Jun 27 10:35:08 localhost.localdomain systemd[23335]: ktrl.service: Failed at step EXEC spawning /home/andrew/.cargo/bin/ktrl: Permission denied
Jun 27 10:35:08 localhost.localdomain systemd[1]: ktrl.service: Main process exited, code=exited, status=203/EXEC
Jun 27 10:35:08 localhost.localdomain systemd[1]: ktrl.service: Failed with result 'exit-code'.

Andrew 로 명령을 실행하고 있습니다 sudo -u ktrl /home/andrew/.cargo/bin/ktrl -d /dev/input/event3. 그러나 ktrl로 전환 sudo su ktrl하고 명령을 실행 해도 /home/andrew/.cargo/bin/ktrl -d /dev/input/event3여전히 작동합니다 .

작업 결과 ll -d:

존재하다/home/andrew

drwxr-xr-x. 39 andrew andrew 4.0K Jun 27 12:06 .

존재하다/home/andrew/.cargo

drwxrwxr-x. 4 andrew andrew 4.0K Jun 25 16:11 .

존재하다/home/andrew/.cargo/bin

drwxrwxr-x. 2 andrew andrew 4.0K Jun 25 16:11 .

ls -l작업 결과/home/andrew/.cargo/bin

total 1552
-rwxrwxrwx. 1 andrew andrew 1579608 Jun 25 16:11 ktrl

답변1

이 문제는 SELinux로 인해 발생합니다. 나는 그것을 비활성화했고 이제 모든 것이 잘 작동합니다.

/usr/local/bin/ktrl편집: 더 나은 해결책은 저장소를 ktrl.service 파일 로 이동하고 그에 따라 업데이트하는 것입니다 . 이렇게 하면 SELinux가 활성화된 상태에서도 계속 작동할 수 있습니다.

관련 정보