web-dev-qa-db-ja.com

Debian 8-起動後にスクリプトを実行する

/etc/rc.localを使用して、起動後にいくつかのスクリプトを実行してみました。

/etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/home/startup.sh

exit 0

/home/startup.sh

mount -t vboxsf test /home/test

これが起動時の結果です

enter image description here

これがsystemctl status rc-local.serviceの出力です

rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static)
   Active: failed (Result: exit-code) since Sun 2016-02-07 22:48:23 ICT; 18min ago
  Process: 432 ExecStart=/etc/rc.local start (code=exited, status=1/FAILURE)

Feb 07 22:48:23 debian rc.local[432]: /sbin/mount.vboxsf: mounting failed with the error: No such device
Feb 07 22:48:23 debian systemd[1]: rc-local.service: control process exited, code=exited status=1
Feb 07 22:48:23 debian systemd[1]: Failed to start /etc/rc.local Compatibility.
Feb 07 22:48:23 debian systemd[1]: Unit rc-local.service entered failed state.

私は手動でSudo bash /home/startup.shを実行してみましたが、正常に動作します。このメソッドをUbuntu 14.04にも適用したところ、エラーは発生しませんでした。

この失敗の背後にある理由は何ですか?どうすれば修正できますか?

2
Lewis

あなたの問題は、あなたのrc-local.servicevboxadd-service.serviceより前に開始されているようですが、その後に実行する必要があります。現在、rc.localはSysVであり(ブートプロセスの最後に実行されます)、systemdによって提供される互換性は完全ではありません(スクリーンショットで確認できます)。おそらく、次のようなカスタムhome-test.mountユニットを使用することをお勧めします。

[Unit]
Requires=vboxadd-service.service
After=vboxadd-service.service

[Mount]
What=test
Where=/home/test
Type=vboxsf

[Install]
WantedBy = multi-user.target

次にsystemctl enable home-test.mount/home/startup.shコールを/etc/rc.localから削除し、再起動して新しいセットアップをテストします。

警告:VirtualBoxの使用経験はありませんが、マウントユニットの使用経験はほとんどありません。しかし、あなたはアイデアを得ます。

3
Ferenc Wágner