起動中に特定のコマンドを実行するようにユーザーを変更しようとしています。自動的に失敗します。コマンドが実行されていないことがわかるので、明らかにユーザー変更は実行されません。
以下のinitscriptで私が何を間違っているのでしょうか?
respawn
console none
start on startup
stop on shutdown
script
su -u anotheruser -c "myCommand" >> "myLogfile.log"
end script
答え1
私はあなたが最新バージョンのUbuntuを実行しているか、突然現れる。エラーを確認できます/var/log/daemon.log
。
標準はsu
構文を採用していますsu [options] [username]
。確認してくださいman 1 su
。次のことを試すこともできます。
su -c "myCommand" anotheruser >> "myLogfile.log"
さらに、いくつかのことが起こります(ほとんどは望ましくありません)。
myLogfile.log
の所有になりますroot
。myLogfile.log
/
同様の絶対パスを使用しないと/tmp/myLogfile.log
(upstartランタイムpwdがに設定されているため/
)、ルートディレクトリに作成されます。
ファイルを自分で所有させるには、anotheruser
コマンドをに切り替えます。
su -c "myCommand >> /tmp/myLogfile.log" anotheruser
myLogfile.log
以前の実行で残りの部分があるroot
場合、または同様のものに変更がないと、問題が発生する可能性があります(通常、通常のユーザーはルートディレクトリにファイルを作成できません)。myLogfile.log
/tmp/myLogfile.log
/
答え2
su
と構文が混乱しているようですsudo
。
su -c 'mycommand' anotheruser
sudo -u anotheruser 'mycommand'