Ok, agora tenho uma solução em funcionamento. Comecei escrevendo um novo script bash
(em vez de usar expect
) que envolvia o utilitário serveradmin
da Apple (sendo ele próprio um wrapper em torno do slapconfig -backupdb
que eu estava chamando diretamente de the expect
script ):
#!/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
Ele se baseia no script , mas usa bash
"here document" em vez de criar um arquivo no disco contendo os comandos serveradmin
(incl. senha em texto puro) a serem executados.
Este funcionou bem quando executado a partir da linha de comando, mas ainda não foi criado .sparseimage
quando foi executado a partir do cron. Então, a segunda etapa da minha correção foi, como mencionei acima nos comentários da minha pergunta original, criar um launchd
plist para executá-lo:
<?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>
Naturalmente, carreguei o plist w / sudo launchctl load /Library/LaunchDaemons/tld.domain.od_backup.plist
(o domínio & tld foi alterado para proteger a identidade). E, parece ser executado corretamente quando chamado por launchd
. O script original também pode ter sido executado corretamente se for chamado por launchd
, mas eu não testei isso.