In the ClinetBeforeJob script, use the at command to schedule the launch
of the caffeinate job with a runtime of 'now'. For example,
at -f caffeinate-script.sh now
On 1/4/2019 2:36 PM, David Brodbeck wrote:
This is driving me nuts because I feel like it should be
straightforward and I must be missing something basic.
I want to launch the caffeinate command on OS X before starting a job.
Caffeinate takes a command as an argument, then goes into the
background and keeps the machine awake until the command exits. I use
this after waking machines up using a WOL script.
When tested from the command line, caffeinate immediately backgrounds
itself. However, when I try to run it as a Bacula ClientBeforeJob
script, bacula-fd waits around forever for caffeiniate to exit.
Here's what I've tried so far:
- Having bacula run a script that then runs caffeinate.
- Having bacula run a script that then runs caffeinate using nohup.
- Having the script redirect stdin, stdout, and stderr of caffeinate
to /dev/null
- Adding an ampersand after the script in the bacula ClientBeforeJob
specification.
What invariably happens is the bash process created by bacula becomes
a zombie and waits for caffeinate to exit. Inspecting the caffeinate
process with lsof shows all of the file handles are redirected to
/dev/null as expected, so I don't think this is a case of stdin or
stdout causing problems. In all cases the only way to get bacula to
finish the backup is to kill the script that caffeinate is running.
I can't figure out why I can't get bacula-fd to move on after the
script goes into the background. When I run the script manually from
the command line it backgrounds immediately.
The oddest thing is this worked fine on clients using bacula-fd
version 7.4.x, but fails on a client using 9.2.0.
Here's the script bacula-fd runs, as it currently stands:
--
#!/bin/bash
PATH=/bin:/usr/bin:/usr/local/bin
# Script to prevent system sleep while bacula is working.
# see bacula-idle-watch.sh for details.
nohup caffeinate -s bacula-idle-watch.sh 2>&1 >/dev/null </dev/null &
--
Here's the contents of bacula-idle-watch.sh; it just waits to exit
until there's no bacula network connection anymore. caffeinate will
terminate once the script exits.
--
#!/bin/sh
# This script delays a few minutes, then loops, checking for bacula-fd
# connections. When there are none, it exits.
# This is meant to be run with caffeinate in a bacula before-job script,
# e.g. "caffeinate -s bacula-idle-watch.sh"
# This will prevent the machine from idle-sleeping until bacula finishes.
PATH=/bin:/usr/bin:/usr/sbin
# We put a long delay here in case it takes bacula a while to get going.
sleep 300
# Now loop while looking at the network connection.
# We limit checks to once every five minutes because worst-case the
machine
# just waits an extra five minutes to sleep.
while ( netstat -an | grep '\.9102.*ESTABLISHED' >/dev/null ) ; do
sleep 300
done
# Once the script exits, the wake-lock is released.
exit 0
--
--
David Brodbeck
System Administrator, Department of Mathematics
University of California, Santa Barbara
_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users
_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users