| 1 | #!/usr/bin/pagsh.openafs |
| 2 | # -*- Shell-Script -*- |
| 3 | # |
| 4 | # Usage: |
| 5 | # |
| 6 | # run-in-pagsh [--fg] name command [argument ...] |
| 7 | # |
| 8 | # The argument `name' is a short description of the program to call, |
| 9 | # without any spaces. It is used for making a PID file, which ensures |
| 10 | # that only one instance of your command is running. |
| 11 | # |
| 12 | # The arguments that come afterward specify the command to run and its |
| 13 | # arguments, if any. |
| 14 | # |
| 15 | # If the command will run in the foreground, then you should use the |
| 16 | # `--fg' argument, making sure that it is the very first argument to |
| 17 | # run-in-pagsh. |
| 18 | # |
| 19 | # Examples: |
| 20 | # |
| 21 | # run-in-pagsh interchange ~/interchange/bin/interchange |
| 22 | # |
| 23 | # run-in-pagsh --fg clean-mail ~/scripts/clean-mail |
| 24 | # |
| 25 | # Make sure that the ~/.run directory exists and is writable. |
| 26 | # See http://wiki2.hcoop.net/MemberManual/RunningUnattendedCommands |
| 27 | # for instructions on how to accomplish this. |
| 28 | |
| 29 | # Allow user to specify "--fg" argument. |
| 30 | if test "$1" = "--fg"; then |
| 31 | shift |
| 32 | BGFLAG= |
| 33 | else |
| 34 | BGFLAG=-b |
| 35 | fi |
| 36 | |
| 37 | # Sanity checks. |
| 38 | if test -z "$2"; then |
| 39 | echo "Error: not enough arguments." |
| 40 | echo "Usage: run-in-pagsh name [--fg] command [argument ...]" |
| 41 | exit 1 |
| 42 | elif test ! -d "$HOME/.run"; then |
| 43 | echo "Error: the ~/.run directory must exist before running this script." |
| 44 | exit 1 |
| 45 | fi |
| 46 | |
| 47 | # Use a different PID file for each program. |
| 48 | K5PID=$HOME/.run/$1.pid |
| 49 | |
| 50 | # The command to run. |
| 51 | shift |
| 52 | CMD="$*" |
| 53 | |
| 54 | # Your keytab file. |
| 55 | KTAB=/etc/keytabs/user.daemon/$USER |
| 56 | |
| 57 | # Terminate current k5start process, if one is running. |
| 58 | if test -f "$K5PID"; then |
| 59 | kill `cat -- "$K5PID"` 2>/dev/null |
| 60 | /usr/bin/k5start -qtU -f "$KTAB" -- rm -f "$K5PID" |
| 61 | fi |
| 62 | |
| 63 | if test -n "$BGFLAG"; then |
| 64 | |
| 65 | # Start fresh k5start daemon which will be refreshing tickets |
| 66 | # every 540 min. |
| 67 | /usr/bin/k5start -U -b -K 540 -t -p "$K5PID" -f "$KTAB" |
| 68 | |
| 69 | # Run actual service with arguments as provided on command line. |
| 70 | $CMD |
| 71 | |
| 72 | else |
| 73 | |
| 74 | # Run the command once, in the foreground, cleaning up its PID |
| 75 | # file when done. |
| 76 | /usr/bin/k5start -U -K 540 -t -p "$K5PID" -f "$KTAB" -- $CMD |
| 77 | /usr/bin/k5start -qtU -f "$KTAB" -- rm -f "$K5PID" |
| 78 | fi |