
特定のユーザー アカウントで起動時にアプリケーションを起動する方法はありますか?
たとえば、を(グループ 内の)a_small_app
ユーザー アカウントで実行したいとします。 に何かを追加する必要がありますか?bob
bobsgroup
/etc/init.d
注: アプリケーションを起動したくないユーザーがログインした後コンピュータの起動時です。
答え1
/etc/rc.local
起動システムに依存しない方法です。これは、/etc/init.d/...
スクリプト、Upstart 構成ファイル、おそらく systemd 構成でも使用できます。
sudo -u oli /full/path/to/application
このコマンドはルート ユーザーとして実行され、sudo
「oli」ユーザーにドロップダウンします。当然、目的に応じてユーザーとコマンドを変更してください。
これを行う方法は少なくとも 12 種類あることを付け加えておきます... しかし、私の経験では、それらはすべて効果はほぼ同じです。 以下は、そのsetuid
スタンザを使用した新規の例です。
start on (filesystem and stopped udevtrigger)
stop on runlevel [06]
setuid oli
respawn
exec /full/path/to/application
答え2
Ubuntuの古いバージョンについてはよく分かりませんが、最近のバージョンでは@reboot
(例えばUbuntu Wikiはこちら少し下にスクロールするか、Ctrl+Fで@リブート)。
これは、ユーザーが起動時に root になることなく (または、root アカウントにアクセスできる人に代わりに実行してもらうこと)、あるいはログインすることなく独自のコマンドを実行できるようにしたい場合に便利な選択肢です。動作する場合は、ログインしなくても動作します。
したがって、「bob」として と入力しcrontab -e
、開いたファイルの下部に次のような新しい行を追加します。
# bottom of bob's crontab
@reboot /path/to/a_small_app
動作しない場合は、環境変数、特に を確認してくださいPATH
。私は通常HOME
、 と をPATH
crontab の先頭に明示的に設定します。次のようになります。
# top of bob's crontab
HOME=/home/bob
PATH=/home/bob/.local/bin:/usr/local/bin:/usr/bin:/bin
動作しない理由を突き止めるためのテクニック:
# bottom of bob's crontab
* * * * * /path/to/a_small_app 2>&1 | tee /tmp/a_small_app.log # will run every minute
...そして/tmp/a_small_app.log
60 秒後にお気に入りのエディターで開いて、そこに役立つ情報があるかどうかを確認します。
今日試して@reboot
みるとtmux実行するコマンドが存在するセッションで、私は今日、この小さなトリックで動作する頑固なスクリプトに遭遇しました。上記のログ機能と組み合わせて示します。
@reboot tmux new-session -d -s mysession "bash -c '/path/to/a_small_app 2>&1 | tee /tmp/a_small_app.log'"
答え3
最初の回答は Ubuntu 14.10 ではもう機能しないようです。
これは私がそこで行う方法です(/etc/rc.localに配置します)
su <username> - -c "<command>"