
問題なくシェルで次のコマンドを実行できます。
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が有効になっても機能し続けることができます。