web-dev-qa-db-ja.com

起動後にコマンドを実行する方法を教えてください。

Sysrqキーを有効にするために、ブートごとに単純なシェルコマンドecho 1 > /proc/sys/kernel/sysrqを実行したいと思います。起動時にこれを行うべきです、そしてそれをするためにどこにスクリプトを置くべきですか?

26
Demi

ディストリビューションに依存します。

Debian由来のディストリビューションを利用している場合は、少なくとも2つの適切な場所、/etc/rc.localとcrontabがあります。 rootとしてcrontabを起動することができます、

   crontab -e

そしてこの行を挿入します

   @reboot /home/my_name/bin/my_command

my_commandは実行可能ファイル(chmod 755 my_command)です。

あるいは、このような線を引いてもかまいません

   /home/my_name/bin/my_command

/etc/rc.localにあり、これは最後に実行されます。いずれにせよ、plsはあなたがあなたのものではなくroot環境を使っているのを覚えていますか。またこの理由から、絶対パスを使用するのが最善です。

あなたがsystemdディストリビューション(Arch Linux、Fedora 19、...)を使っている場合、最初のオプション(crontab)はまだ有効です、2番目のオプション(/etc/rc.local)はもう存在しません。この場合、systemctlによって実行されるサービスを開始する方法を学ぶ必要がありますが、これはあなたの単純な質問で交渉した以上のものかもしれません。

36
MariusMatutiae

システムがそれをサポートするバージョンのcron(特にVixie cron)を実行している場合は、cronジョブで@rebootを使用できます。

これは、サポートしている8つの特殊文字列のうちの1つです。

crontab(5)のmanページを引用する(私のUbuntu 12.04システムから):

最初の5つのフィールドの代わりに、8つの特殊文字列のうちの1つが表示されることがあります。

string         meaning
------         -------
@reboot        Run once, at startup.
@yearly        Run once a year, "0 0 1 1 *".
@annually      (same as @yearly)
@monthly       Run once a month, "0 0 1 * *".
@weekly        Run once a week, "0 0 * * 0".
@daily         Run once a day, "0 0 * * *".
@midnight      (same as @daily)
@hourly        Run once an hour, "0 * * * *".

@rebootに関する限り、起動はcron(8)デーモンの起動時です。特に、いくつかのシステムデーモンや他の機能が起動する前に発生する可能性があります。これは、マシンの起動順序の順序によるものです。

これは起動時に何かを実行する唯一の方法ではありませんが、これは代替手段です。

19
Keith Thompson

Linuxのほとんどすべての変種(長く、ずっと前に戻る)には、起動時に実行される/etc/rc.localファイルがあります - それにコマンドを追加するだけです。

それは言った、あなたもそれをする必要はありません。 「正しい」方法は、kernel.sysrq = 1という行を/etc/sysctl.confに変更または追加することです。

10
davidgo