Ubuntu 14.04 で次のコマンドを実行しています。
root@ubuntu:~# service rpki-ca restart
stop: Unknown job: rpki-ca
start: Unknown job: rpki-ca
root@ubuntu:~# sudo service rpki-ca restart
rpki-ca stop/waiting
rpki-ca start/running
root@ubuntu:~#
sudo
2 番目のコマンドのの効果は何ですか? root に が必要なのはなぜですかsudo
?
答え1
よし、グーグルでこれを見つけてU&Lの回答、そのチェック改訂履歴そして、引用された情報源に従って改訂版 #1、これはたまたまアップスタートバグ問題は、root 実行に切り替えると、環境変数が再度設定されるのではなく、以前の環境から引き継がれることsu
です$UPSTART_SESSION
。
頭を悩ませてグーグルで検索した結果、投稿を見つけました(https://unix.stackexchange.com/questions/120050/sudo-service-vsftpd-returns-unknown-job-vsftpd)は、
sudo service xxxx start
(または停止、または再開)動作しますが、
`service xxxx start (suセッション内)
動作しません。
したがって、原因は明らかに環境でした。「sudo su」または「su -」ではなく「su」を使用してルート権限を取得すると、「service」も正しく機能しません。「su」は、通常のユーザー環境のほとんどをルート セッションに持ち込むためです。
いくつかのテストを行った結果、原因は UPSTART_SESSION 環境変数であることがわかりました。この変数は、「su」を実行すると設定されますが、「sudo su」または「su -」を実行すると設定されません。テスト結果を以下に示します。
- 動作しません
jsveiga@dell:~$ su Password: root@dell:/home/jsveiga# service smbd restart stop: Unknown job: smbd start: Unknown job: smbd
-- suセッションからでも動作します
root@dell:/home/jsveiga# sudo service smbd restart smbd stop/waiting smbd start/running, process 3823
-- 作品
root@dell:/home/jsveiga# exit jsveiga@dell:~$ sudo su root@dell:/home/jsveiga# service smbd restart smbd stop/waiting smbd start/running, process 3862
-- 作品
root@dell:/home/jsveiga# exit jsveiga@dell:~$ su - Password: root@dell:~# service smbd restart smbd stop/waiting smbd start/running, process 3905
-- suを実行してからUPSTART_SESSIONの設定を解除すると動作します
root@dell:/home/jsveiga# exit jsveiga@dell:~$ su Password: root@dell:/home/jsveiga# service smbd restart stop: Unknown job: smbd start: Unknown job: smbd root@dell:/home/jsveiga# unset UPSTART_SESSION root@dell:/home/jsveiga# service smbd restart smbd stop/waiting smbd start/running, process 4244
そのため、環境変数が存在するだけで、起動/停止スクリプトが何らかの理由で失敗します
UPSTART_SESSION
。BR、ジョアン・S・ベイガ
これを修正するには、設定を解除するだけです$UPSTART_SESSION
:
unset UPSTART_SESSION
またはsu -
、、sudo su
またはなどの他の手段でルートに切り替えますsudo -i
。
答え2
このコンテキストでは、これは何も意味しないので削除する必要があります。他のユーザーを指定せずに、sudo
root になろうとします。そのため、すでに root になっている場合は、実行中のコマンドが完了するまでリソースを占有する追加のプロセス (自分自身用) を作成する以外は何sudo
も行いません。