Код 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. (Вероятно, излишне для того, что вы хотите сделать, но это может помочь с несколькими вещами).