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 <mailto: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 <mailto: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 <mailto: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 <mailto: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 list
                Bacula-users@lists.sourceforge.net  
<mailto:Bacula-users@lists.sourceforge.net>
                https://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 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