summaryrefslogtreecommitdiffstats
path: root/producer.sh
diff options
context:
space:
mode:
Diffstat (limited to 'producer.sh')
-rw-r--r--producer.sh36
1 files changed, 36 insertions, 0 deletions
diff --git a/producer.sh b/producer.sh
new file mode 100644
index 0000000..e05dca4
--- /dev/null
+++ b/producer.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+FIFO_PATH="${QUEUE_FIFO_PATH:-/tmp/job_queue}"
+
+# Validate argument
+if [ $# -eq 0 ] || [ -z "$1" ]; then
+ echo "Usage: $0 \"message to publish\"" >&2
+ exit 1
+fi
+
+MESSAGE="$1"
+
+# Ensure the FIFO exists (create if missing)
+if [ ! -p "$FIFO_PATH" ]; then
+ mkfifo -m 0600 "$FIFO_PATH" || {
+ echo "[$(date '+%H:%M:%S')] ERROR: Failed to create FIFO at $FIFO_PATH" >&2
+ exit 1
+ }
+fi
+
+# Handle SIGPIPE gracefully so the producer doesn't crash if the consumer disconnects
+trap '' PIPE
+
+# Publish message to the FIFO
+if echo "$MESSAGE" > "$FIFO_PATH" 2>/dev/null; then
+ # Format and cap log line at 72 chars
+ log_line="[$(date '+%H:%M:%S')] Published: ${MESSAGE}"
+ if [ ${#log_line} -gt 72 ]; then
+ printf "[%s] Published: %.45s...\n" "$(date '+%H:%M:%S')" "$MESSAGE"
+ else
+ echo "$log_line"
+ fi
+else
+ echo "[$(date '+%H:%M:%S')] ERROR: Failed to write to FIFO at $FIFO_PATH" >&2
+ exit 1
+fi