ファイルの解決権限は正しいが、systemdサービスは権限がないことを示し、起動に失敗した.ヒント:service:Failed to execute command:Permission denied


げんしょう
ファイル権限は正しいが、systemd・起動時にPermission deniedエラーが発生した.
ファイル権限:
[core@localhost ~]$ ll /usr/local/bin/
total 192512
-rwxrwxr-x. 1 core core  39813120 Jun  6 09:00 kubeadm
-rwxrwxr-x. 1 core core  44032000 Jun  6 09:00 kubectl
-rwxrwxr-x. 1 core core 113283800 Jun  6 09:00 kubelet

エラー内容:
Jun 06 10:48:52 localhost systemd[1]: Started kubelet: The Kubernetes Node Agent.
Jun 06 10:48:52 localhost systemd[1]: kubelet.service: Main process exited, code=exited, status=203/EXEC
Jun 06 10:48:52 localhost systemd[1]: kubelet.service: Failed with result 'exit-code'.
Jun 06 10:49:02 localhost systemd[1]: kubelet.service: Scheduled restart job, restart counter is at 79.
Jun 06 10:49:02 localhost systemd[1]: Stopped kubelet: The Kubernetes Node Agent.
Jun 06 10:49:02 localhost systemd[13884]: kubelet.service: Failed to execute command: Permission denied
Jun 06 10:49:02 localhost systemd[13884]: kubelet.service: Failed at step EXEC spawning /usr/local/bin/kubelet: Permission denied

ソリューション
これは依然としてSELinuxがやった鬼だ.
これは、実行ファイルの が正しくないことによるエラーです.こちらは、実行可能ファイルがユーザーホームに保存されてから、ターゲットディレクトリに移動しているからです.ただし、実行可能ファイルをユーザホームからターゲットディレクトリに移動すると、SELinuxのコンテキストは自動的に変更されず、依然としてユーザホームである.だから問題が発生しました.
原因が分かった以上、解決策もあるので、次のコマンドを実行すれば解決できます.
sudo restorecon -rv /usr/local/bin/

このうち/usr/local/bin/ではファイルが存在するディレクトリが実行され、実行時には正しいディレクトリに置き換える必要があります.