Forgot to CC this to the list, but it's the best solution I've gotten so far. It works, but on macOS you have to turn the 'at' service on first. I ended up with this:
#!/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. # We need to launch with 'at' to avoid bacula-fd hanging waiting for script # completion. First we make sure atrun is enabled. launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist echo '/usr/bin/caffeinate -s /usr/local/bin/bacula-idle-watch.sh' | at now --- Note that by nature 'at' is not immediate. It may take a minute or so for the script to launch, so plan accordingly. On Sat, Jan 5, 2019 at 8:18 AM Josh Fisher <jfis...@pvct.com> wrote: > 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 > listBacula-users@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/bacula-users > > -- 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