新規インストール時に多数のパッケージを追加し、システムを更新するスクリプトを作成しました。問題となっている init.d スクリプトの関連部分は次のとおりです。
#!/bin/sh
### BEGIN INIT INFO
# Provides: update
# Required-Start: $local_fs $syslog $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Update my system
### END INIT INFO
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting update"
apt-get --assume-yes update &&
apt-get --assume-yes dist-upgrade
log_end_msg $?
;;
*)
echo "Usage: $0 start" >&2
exit 2
;;
esac
exit 0
スクリプトを実行可能にして、 に登録しましたsudo update-rc.d update defaults
。 で再起動後に確認するとsudo service update status
、すべてのパッケージ リポジトリが解決に失敗するというメッセージが表示されます。
W: Failed to fetch http://.../Release.gpg Temporary failure resolving '...'
W: Some index files failed to download. They have been ignored, or old ones used instead.
スクリプトはinit.d
ここで で終わります。ただし、コマンドを実行する前に をスクリプトにcode=exited
追加すると、問題は解決します。リストに を追加すれば、この問題は自動的に解決されると考えていました。この問題に対処するより良い方法はありますか?sleep 10
apt
$network
# Required-Start
違いがあるかどうか確認するためにこれを実行していますRaspian Jessie 2016-03-18
が、違いはないような気がします。
答え1
更新サービスを実行する前に、要件の一部としてネットワーク サービスの後に開始する 1 つまたは 2 つのサービスを追加すると、スクリプトに sleep 10 を追加するよりも生産的な遅延が追加されます。