Код init.d не совсем работает

Отфильтрованные данные из живого потока MQTT выгружаются в CSV-файл с именем mqtt.csv и процесс сброса делается executor_start_up_job.txt который написан на BASH (имеет шебанг).

Я хочу сделать дамп демона фильтра, т.е. в фоновом режиме, а также хочу сделать так, чтобы каждый раз при перезагрузке системы это делалось автоматически. Итак, я решил написать скрипт init.d, и содержимое моего кода:

#!/bin/bash
set -x

requested_command=$1

start() {

        /home/ed/start_up_job/executor_start_up_job.txt &
}
# Restart the Dump
stop() {

        killproc executor_start_up_job.txt
        echo
}
### main logic ###
case $requested_command in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        last_line=`cat mqtt.csv | tail -1`
        echo "last print line: $last_line"
        ;;
  restart)
        stop
        start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac
exit 0

Как только я вставил set -x Я получаю следующий вывод:

+ ./MySQL_table_update_daemon.sh start
+ requested_command=start
+ start
+ exit 0

В: Если я смогу заставить этот код работать, то я помещу его в /etc/init.d/ каталог, чтобы он мог работать каждый раз. Однако в настоящее время это не работает, и выход без set -x это ничего, то есть, как будто я только что нажал ввод в терминале.

1 ответ

Вам необходимо удалить exit 0 в конце скрипта, иначе он будет выходить при каждом запуске.

Вы можете проверить cat /etc/init.d/skeleton для примера рабочего скрипта init.d. (Вероятно, излишне для того, что вы хотите сделать, но это может помочь с несколькими вещами).

Другие вопросы по тегам