59 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| # Simple launcher script to start some worker scripts within a folder
 | |
| # sequentially, in ABC order. The workers' folder is a subfolder of the
 | |
| # script's folder with same name as the script, followed by a .d extension.
 | |
| # All worker scripts must be executable and must have .sh extension.
 | |
| # Other files within the folder will be simply ignored.
 | |
| #
 | |
| # This script usually get called via symlink, therefore the workers' folder's
 | |
| # name comes from the symlink's name. This folder selection may be overridden
 | |
| # using an environment variable. Another environment variable may order to
 | |
| # waiting a time between workers' launch.
 | |
| #
 | |
| # Author: Kovács Zoltán <kovacs.zoltan@smartfront.hu>
 | |
| #         Kovács Zoltán <kovacsz@marcusconsulting.hu>
 | |
| # License: GNU/GPL v3+ (https://www.gnu.org/licenses/gpl-3.0.en.html)
 | |
| # 2023-06-18 v1.0
 | |
| # new: forked from the "Smartfront's DOCKER_skeleton" repository.
 | |
| # 2021-08-30 v0.1 Initial release
 | |
| 
 | |
| # Accepted environment variables and their defaults.
 | |
| SLEEP_BETWEEN=${SLEEP_BETWEEN-"0"}                      # Secs between launches
 | |
| WORKER_DIR=${WORKER_DIR:-""}				# Worker's folder
 | |
| 
 | |
| # Messages.
 | |
| MSG_MISSINGWRK="Fatal: missing worker's folder"
 | |
| 
 | |
| # Checks the components.
 | |
| [[ -z "$(which basename)" ]] && exit 1
 | |
| [[ -z "$(which dirname)"  ]] && exit 1
 | |
| [[ -z "$(which printf)"   ]] && exit 1
 | |
| [[ -z "$(which sleep)"    ]] && exit 1
 | |
| # Where I'm?
 | |
| SCRPATH="$( cd -P "$(dirname "$0" )" && echo "$PWD" )" #"
 | |
| 
 | |
| # Checks the worker's folder.
 | |
| [[ -z "$WORKER_DIR" ]] && WORKER_DIR="$SCRPATH/$(basename "$0").d"
 | |
| if [ -z "$WORKER_DIR" -o ! -d "$WORKER_DIR" ]; then
 | |
|     echo "$MSG_MISSINGWRK $WORKER_DIR" >&2; exit 1
 | |
| fi
 | |
| 
 | |
| # Converts the (optional) time parameter to float.
 | |
| SLEEP_BETWEEN=$(printf '%.2f' "$SLEEP_BETWEEN" 2>/dev/null)
 | |
| 
 | |
| # Enumerates the workers.
 | |
| WORKERS="$(cd "$WORKER_DIR"; ls -1 *.sh 2>/dev/null)"
 | |
| for worker in $WORKERS ""
 | |
| do
 | |
|     # Safety first...
 | |
|     if [ -n "$worker" -a -x "$WORKER_DIR/$worker" ]; then
 | |
| 	# Launches the worker then waits till it finishes.
 | |
| 	"$WORKER_DIR/$worker" "$@"
 | |
|         # Optionally reduces the launch frequency.
 | |
|         sleep ${SLEEP_BETWEEN//,/.}      # decimal point need
 | |
|     fi
 | |
| done
 | |
| 
 | |
| # That's all, Folks!
 |