起動時に「rc.local」を実行するにはどうすればよいですか?


75

システムの起動時に実行したいスクリプトがあります。「rc.local」に配置しましたが、機能しません。起動時に実行できるようにするにはどうすればよいですか?


1
xsetwacomコマンドはどこにありますか?/etc/rc.localは、起動時に非常に単純なPATHで実行されます。これはおそらく、ターミナルでログインしたPATHとは異なります。ターミナルで、次のように入力します。type -p xsetwacom次に、/ etc / rc.localの「xsetwacom」コマンドを「type -p」で返されるフルパスに置き換えます。xsetwacomが機能する前に、手動で初期化する必要がありますか?
ワルチネーター

3
systemdをスタートアップマネージャーとして使用て、rc.localの互換性が実行されていることを確認しますsystemctl status rc-local.service
。– rubo77

waltinatorのコメントは私の問題でした。最小限のパスのため、実行したいスクリプトの実行方法がわかりませんでした。runninig /etc/rc.localの実行時にUbuntu 14.04システムにロードされたパスは次のとおりです。/ sbin:/ usr / sbin:/ bin:/ usr / bin ... echo $PATH > /home/rc_local_path/ etc / rc.localを実行し、起動時に実行されたファイルを確認します。
RaisinBranCrunch 16

スクリプトを継続的実行する必要がある場合は、ファイル内のデーモンとして起動する必要があることに注意してrc.localください!
-totymedli

使用するsudo systemctl enable rc-local.serviceことが確実にするために/etc/rc.local 、サーバの起動時に実行される
ウィリアム・

回答:


56

スクリプトを手動で実行できますか?そうでない場合、それはそのスクリプトの問題です。それ以外の場合は、rc.localをご覧ください。(そのスクリプトをrootとして実行する必要がある場合は、sudoを使用して手動で実行する必要があります。)

/etc/rc.localが実行可能であり、それが呼び出すスクリプトも実行可能であることを確認してください。

$ ls -l /etc/rc.local
-rwxr-xr-x 1 root root 419 2010-08-27 11:26 /etc/rc.local

rc.localにshebang行があることを確認します(これはデフォルトです)。

$ head -n1 /etc/rc.local
#!/bin/sh -e

はい、スクリプトを手動で実行できます。/etc/rc.localが実行可能であることを確認するにはどうすればよいですか?入力する必要があるのは何ですか?「$ ls -l /etc/rc.local -rwxr-xr-x 1」ですか?ありがとう!
ペドロ

@pedroo:ターミナルに表示されているものをそのままコピーしました(したがって、プロンプト、入力、および出力がすべて上記に表示されます)。コマンドは「ls -l /etc/rc.local」で、実行可能であれば、出力にこれらのXが含まれます。

3
「ls -l /etc/rc.local」を試しましたが、実行可能ですが、起動時に実行できません...
ペドロ

1
@pedroo:Xサーバーを実行する必要がありますが、rc.localの実行時には発生しません。rc.localから実行すると、何もせずに終了します(syslogや他の場所にメッセージが書き込まれることを望みます)。代わりに、xsetwacomコマンドを〜/ .xinitrcまたは/ etc / X / xinit / xinitrcに配置する必要があります。

1
@pedroo:rc.localには、異なる時間に実行するコマンドが含まれているためです。新しいファイルを作成し、〜/ binに配置し、実行可能ファイル(chmodまたはNautilusのプロパティ)としてマークし、最初の行を「#!/ bin / bash」にして、コマンドを後の行に配置します。

53

私の場合、どの指示も完璧な解決策ではありませんでした。あなたが私と同じくらい不運だったなら、この詳細なものを試してください

  1. 実行コードをすべて、foo.shなどの任意の名前を持つ別のテキストファイルに入れて、任意の場所に保存します。
  2. 追加

    #!/bin/sh

    コードの最初の行として。

  3. foo.shを実行してみてください

    sudo foo.sh

    エラーがないことを確認します。

  4. shコマンドの後に、作成したスクリプトの絶対パスと名前を/etc/rc.localスクリプトに提供します

    sh '/path/to/your/script/foo.sh'
  5. 上記の行をコードの最後の行の前に置くことを忘れないでください

    exit 0

    /etc/rc.localスクリプトの最後。

  6. /etc/rc.localの最初の行を確認してください

    #!/bin/sh -e
  7. /etc/rc.localを実行可能にします(まだ実行可能でない場合)

    sudo chown root /etc/rc.local
    sudo chmod 755 /etc/rc.local
  8. 実行してすべてが正常に動作することを確認します

    sudo /etc/init.d/rc.local start
  9. システムの再起動をテストします。

6
ステップ8が重要であり、スクリプトがスタートアップ環境で実行されることを確認しました。私の場合、コマンドのフルパスを指定する必要があります。
ピーターグリュック

知事と一歩一歩の偉人、それはcentosで動作しますが、sudo /etc/rc.local start最初に実行されます。
A1Gard

おかげで-この故障は私にとって本当に助けになり、上記のステップ8は私にとっても鍵でした!それなしでは、+ 1をリダイレクトしませんでした(参考のため、bitnamiクラウドサーバーで実行されているノードアプリは、継続的に実行するために永久に使用されます)。
fidev

手順8は良いヒントでしたが、手順7が私の問題を解決したのではないかと思います
。cron

28

新しいUbuntuバージョンでsystemd/etc/rc.local、デフォルトで常にロードされるわけではありません。

互換性サービスがロードされているかどうかを確認します

systemctl status rc-local.service

スクリーンショット

アクティブな(終了した)が含まれている場合、設定は問題ないようで、/etc/rc.localファイルに別のエラーが発生している可能性があります(これは、たとえば失敗するコマンドの可能性があります)。


4
rc-local.serviceが有効になっていない場合は、Systemdで/etc/rc.localを有効に
yaitloutou

3

2つの提案。

  1. ターゲットスクリプトファイルも実行可能としてマークされていることを確認します。
  2. ターゲットスクリプトはsudoコマンドを実行していますか?その場合は、sudoパスワードを指定する必要があります。

私の悪い。次にチェックしてください。補正enzotibをありがとう:)


8
rc.localrootとして実行されるため、パスワードは不要です。
-enzotib
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.