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

Reply via email to