Хорошо, у меня теперь есть рабочее решение. Я запустил путем записи нового bash
сценарий (в противоположность использованию expect
) который перенес Apple serveradmin
утилита (сама быть оберткой вокруг slapconfig -backupdb
Я звонил непосредственно от expect
сценарий):
#!/bin/bash
dst="/path/to/your/backup/directory"
pass="password"
host=$(hostname)
date=$(date +%Y-%m-%d-%H%M)
serveradmin command <<-EOC
dirserv:backupArchiveParams:archivePassword = $pass
dirserv:backupArchiveParams:archivePath = ${dst}/od_backup-${host}-${date}
dirserv:command = backupArchive
EOC
Это основано на этом сценарии, но использовании bash
"здесь документ" вместо того, чтобы создать файл на диске, содержащем serveradmin
команды (включая незашифрованный пароль), чтобы быть выполненным.
Этот хорошо работал, когда выполнено из командной строки также, но все еще нет .sparseimage
был создан, когда это было выполнено от крона. Так, второй этап моей фиксации был, как я упомянул выше в комментариях к моему исходному вопросу, для создания a 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>tld.domain.od_backup</string>
<key>ProgramArguments</key>
<array>
<string>/var/root/sbin/od_backup</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>2</integer>
<key>Minute</key>
<integer>30</integer>
</dict>
</dict>
</plist>
Естественно, я загрузил plist w/sudo launchctl load /Library/LaunchDaemons/tld.domain.od_backup.plist
(домен и tld, измененный для защиты идентификационных данных). И, это, кажется, работает правильно при вызове launchd
. Исходный сценарий, возможно, также работал правильно, если названо launchd
, но я не протестировал его.
Я столкнулся с той же проблемой при отладке исходного сценария, для меня время ожидания по умолчанию в 10 секунд приводило к прерыванию встроенной команды hdiutil. Я исправил это, добавив:
установить тайм-аут 120
в ожидаемом сценарии. Теперь скрипт снова работает нормально. Мой сценарий:
#!/usr/bin/expect -f
set date [timestamp -format "%Y-%m-%d"]
set archive_path "path/to/you/backup/dir"
set archive_password "password"
set archive_name "opendirectory_backup"
set timeout 120
spawn /usr/sbin/slapconfig -backupdb $archive_path/$archive_name-$date
expect "Enter archive password"
send "$archive_password\r"
expect eof