LauchDaemonsの使い方

バックアップをとるために/Library/LaunchDaemons/に次のようなplistを置きました。複数ユーザのバックアップなのでrootでlaunchctl loadしています。
ところが,定期的に起動している気配がありません。/Library/Logs/Console/0/console.log にも記録されてません。
何を勘違いしているのか見当がつかないので,よろしくお願いします。
なお通常rootは無効にしてあります。なのでバックアップスクリプトはrootのディレクトリではなく,ADMINUSERにしてあります。
またlaunchctl listをすれば,local.emac.backupもリストアップされます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.emac.backup</string>
<key>ProgramArguments</key>
<array>
<string>/Users/ADMINUSER/Documents/backup.sh</string>
</array>
<key>StartInterval</key>
<integer>5400</integer>
</dict>
</plist>
#!/bin/sh
# backup.sh スクリプト
rsync -avR /Users/user1/Documents /Volumes/ex30g/
rsync -avR /Users/user2/Documents /Volumes/ex30g/
rsync -avR /Users/user3/Documents /Volumes/ex30g/

投稿日 2007/02/02 13:47

返信: 10

2007/02/02 14:50 Community User への返信

おかしくはないように思いますが、エラーログはsystem.logのほうに出てませんか?あと、言わずもがなですが、backup.sh単独での動作確認はされてますね?
動作しない原因とは無関係ですが、/Library/LaunchDaemonsにユーザ全員のバックアップスクリプトを置くより、/Libary/LaunchAgentsに各ユーザのバックアップスクリプトを置く方が良い気がしますが・・

2007/02/03 09:33 Community User への返信

Y.Kawabe さんありがとうございます。backup.sh単独での動作確認はしています。現状では当たり前ですけど,launchctl start local.emac.backupでは起動しません。
system.logをみたところエラーログを見つけました。
Feb 2 11:32:29 eMac launchd: local.emac.backup: exited with exit code: 127
Feb 2 11:32:29 eMac launchd: local.emac.backup: 9 more failures without living at least 60 seconds will cause job removal
です。exit code 127はネットワークダウンだと思うのですが,バックアップ先のHDDはUSBでつなぎっぱなしです。
9 more failures...の方は,ググったところpostfixのエラーのようです。ネットワークがなんで関連しているのか見当もつきません。
LaunchDaemonsに置いたのは,特にこだわった訳ではなく,一元的に管理できるからその方が楽だなと思った程度です。

2007/02/03 10:16 Community User への返信

> バックアップ先のHDDはUSBでつなぎっぱなしです。
このrsync の書き方だと、バックアップ先はマウントされている必要がありますが、それは大丈夫ですか?
rsync が実行されるまでにスリープすると、ネットワーク接続は切れますので、マウントは解除されますよ。
それとも、バックアップ先は外付USBドライブですか?
もしそうなら、rsync でなくても単にcp でもいいのでは?

2007/02/03 11:39 Community User への返信

はにさんもコメントされていますが、11:32:29という時刻が起動時なら、まだUSB HDがマウントされていない状態でスクリプトが実行された可能性はないでしょうか?
2番目のメッセージは、postfixに限らずlaunchdが起動したdaemonやagentが60秒以内に死亡した場合には出るようです。
両方を防ぐ意味で、たとえば最初のrsyncの前に「sleep 60」とかを入れておくとどうでしょう?

2007/02/03 13:54 Community User への返信

> USB HDがマウントされていない状態でスクリプトが実行さ
> れた可能性
バックアップソフト'Deja Vu'のヘルプより・・・
(Q)
バックアップのスケジュールに合わせてログインしなければ
ならないのでしょうか?
(A)
Jaguar ユーザの場合:
いいえ、ログインする必要はありません。
Panther ユーザの場合:
Panther では、ユーザが 1 人もログインしていないときには、
リムーバブルボリュームのマウントが解除されてしまうよう
です。対処方法は以下の 2 通りが考えられます:
“ファーストユーザスイッチ”を有効にしておき、アップル
メニューからログアウトする代わりに、ファーストユーザス
イッチメニュー(メニューバーの右上にあります)の“ログ
インウインドウ…”を選択するようにする。あなたのアカウ
ントでログインしたままの状態にするのに抵抗がある場合は、
新規ユーザを作成(システム環境設定→アカウント)し、
代わりにそのユーザをログインしたままの状態にするように
する。
もしくは、意味が理解できるのであれば、ターミナルで下記
のコマンドを入力する:
sudo defaults write /Library/Preferences/SystemConfiguration/autodiskmount AutomountDisksWithoutUserLogin -bool true
#的外れでしたらご容赦くださいm(_ _)m

2007/02/05 14:31 Community User への返信

みなさん,ありがとうございます。すべてのユーザがログインしている時ではないので,外付けHDDがマウントされてないというのはありえそうです。
が,ためしにrsyncのステップ前に
echo "`date` backup.sh: start."
を挿入してみたのですが,system.logにもconsole.logにも記録が残りません。
そもそもスクリプトが起動してないようです。それとも,launchdはマウントの有無を確認してから起動させているのでしょうか。

2007/02/09 09:00 Community User への返信

既に解決済みかも知れませんが...
私の環境ではRunAtLoadを入れた場合、system.logを見ると、ボリュームのマウントと思しきメッセージの前でエラーで止まりましたが、オリジナルメッセージどおり(パスと間隔を5400->300に変えました)では、5分間隔で動作していますね。
backup.sh内のコピー先も、パーティション分けした内蔵HDDに変えています。
ちなみに、RunAtLoadを入れた場合も5分後に起動されていますが、同じエラーで止まっています。
動作しないのは、皆さんがご指摘されているように、コピー先がマウントされていないからでは無いでしょうか?
あと、ADMINUSERがFileVault : 入とか。

2007/02/09 11:32 Community User への返信

みなさん、アドバイスありがとうございました。なんとか動くようになりましたので。報告します。(launchdの様子を見ていたので遅くなってすみません)。plistは以下の通りです。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.emac.backup</string>
<key>Program</key>
<string>/Users/ADMINUSER/Documents/backup.sh</string>
<key>ProgramArguments</key>
<array>
<string>backup.sh</string>
</array>
<key>RunAtload</key>
<true/>
<key>StartInterval</key>
<integer>5400</integer>
<key>StandardOutPath</key>
<string>/Library/Logs/Console/0/console.log</string>
<key>StandardErrorPath</key>
<string>/Library/Logs/Console/0/console.log</string>
</dict>
</plist>
アドバイスに従ってProgramArgumentsのパスを分けました。それとRunAtloadのプロパティを加えました。標準出力のプロパティも書き加えたところ,echoを記録するようになりました。ADMINUSERのFileVaultは切にしてあります。
バックアップスクリプトは以下の通りです。
#!/bin/sh
# backup.sh スクリプト
echo "`date` `basename ${0}`: launched."
rsync -avR /Users/user1/Documents /Volumes/ex30g/
rsync -avR /Users/user2/Documents /Volumes/ex30g/
rsync -avR /Users/user3/Documents /Volumes/ex30g/
system.logをみたところbackup.sh起動の2秒後にdiskarbitrationdがログに残ってます(ログの読み方を知らないのですが...)マウントのタイミングは若干問題があるかもしれません。外付けHDDをUSB接続です。
重ねてありがとうございました。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

LauchDaemonsの使い方

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。