I used "at" on High Sierra, but on Mojave it no longer works.
Disappointing, but not terribly surprising since it's been deprecated for
years. It might be possible to make it work on Mojave if I disabled system
protection, but I'm trying to avoid that if at all possible.

Your disown suggestion was a good one, but it doesn't work either. I tried
with:

#!/bin/bash

PATH=/bin:/usr/bin:/usr/local/bin
caffeinate -s bacula-idle-watch.sh >/dev/null 2>&1 </dev/null &
disown

bacula-fd still waits forever for caffeinate to exit before continuing. I
also tried "disown $!" just in case it needed a PID. I think the problem
may be that disown only removes the job from the shell's job list; I don't
think it does anything to detach the process on a deeper level.

I think I'm barking up the wrong tree and the ClientBeforeJob functionality
just isn't meant for this sort of thing. I gather from earlier conversation
that it was only working for me in 7.4.x because of a bug.

I'm leaning toward a cron job or background daemon that polls for bacula
jobs and runs my script when it detects one, possibly via a lockfile
created in a ClientBeforeJob script. Inefficient, but it should work. One
issue is Macs don't stay awake for long when they get a WOL packet; I may
have as little as 30 seconds to launch the caffeinate process before the
machine goes to sleep again, so I'll have to poll frequently.


On Fri, Feb 1, 2019 at 8:39 AM Josh Fisher <jfis...@pvct.com> wrote:

>
> On 1/31/2019 9:37 PM, David Brodbeck wrote:
>
> Belatedly, I should note that the 'screen' solution doesn't work either.
> It works if you launched bacula from a terminal, but if the launchdaemon
> has launched it screen will abort because of not having a tty.
>
> I keep having a nagging feeling that this can't possibly be this
> difficult, that I must be being stupid and overlooking something simple. I
> just can't figure out how to get bacula-fd to let a ClientBeforeJob script
> go into the background instead of waiting for it to exit. It worked in
> bacula-fd 7.x, but in 9.x it appears to be impossible to detach the process
> thoroughly enough for bacula to continue. Maybe the only solution is to
> downgrade my clients?
>
>
> Well, at would be my preference, since it would allow the RunBefore script
> to exit likely even before at started the background script, but since at
> is for some reason disallowed, try the bash built-in 'disown'.
>
> #!/bin/bash
> # ~/background-test.sh
> sleep 120 &
> disown
> exit 0
>
> $ ~/background-test.sh
> $ jobs
> $ ps xa | grep sleep
> 28562 pts/1    S      0:00 sleep 120
> 28565 pts/1    S+     0:00 grep --color=auto sleep
> $
>
>
>
>
> On Tue, Jan 15, 2019 at 12:41 PM David Brodbeck <brodb...@math.ucsb.edu>
> wrote:
>
>> New solution: Instead of abusing at, abuse screen.
>>
>> screen -d -m caffeinate -s bacula-idle-watch.sh
>>
>>
>> On Tue, Jan 15, 2019 at 11:51 AM David Brodbeck <brodb...@math.ucsb.edu>
>> wrote:
>>
>>> Hmm. Unfortunately the solution below does not work on Mojave. Scripts
>>> no longer have permission to run 'at' because they can't create
>>> /usr/lib/cron/jobs/.lockfile.
>>>
>>> Adding bacula-fd to the list of apps with full disk access doesn't do
>>> anything, unfortunately, I guess because it's not a full-fledged app?
>>> Running 'at' manually from the command line works, but only if Terminal is
>>> added to the list, so it seems you need an "official" app somewhere in the
>>> process tree. (This is also a problem for backing up certain files in user
>>> home directories, but that's another issue.)
>>>
>>>
>>> On Mon, Jan 7, 2019 at 11:53 AM David Brodbeck <brodb...@math.ucsb.edu>
>>> wrote:
>>>
>>>> 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
>>>>
>>>>
>>>
>>> --
>>> David Brodbeck
>>> System Administrator, Department of Mathematics
>>> University of California, Santa Barbara
>>>
>>>
>>
>> --
>> David Brodbeck
>> System Administrator, Department of Mathematics
>> University of California, Santa Barbara
>>
>>
>
> --
> 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

Reply via email to