我目前从 MQTT 直播流中过滤掉数据。然后,我将此数据转储到名为 的 csv 文件中mqtt.csv
,转储过程是executor_start_up_job.txt
用 BASH 编写的。
我想转储过滤器守护进程,即在后台进行转储,并且还想将其转储到系统中,以便每次重新启动系统时都会自动完成。所以我决定写一个init.d
脚本,我的代码内容是:
#!/bin/bash 设置-x 请求的命令=$1 开始() { /home/ed/start_up_job/executor_start_up_job.txt & } # 重新启动转储 停止() { Killproc executor_start_up_job.txt 回声 } ###主要逻辑### 案例 $requested_command 中 开始) 开始 ;; 停止) 停止 ;; 地位) last_line=`cat mqtt.csv |尾巴-1` echo "最后打印行: $last_line" ;; 重新开始) 停止 开始 ;; *) echo“用法:$0 {开始|停止|重新启动|状态}” 1号出口 ;; 埃萨克 出口0
插入后,set -x
我会得到以下输出:
+ ./MySQL_table_update_daemon.sh start
+ requested_command=start
+ start
+ exit 0
问:这是我第一次写init.d
,我已经根据这个编写了我的代码例子它不起作用,因为我收到错误“ segmentation fault
”
答案1
不,它不会工作,因为你有几个语法错误。
您还存在一些违反最佳实践的情况。
更正错误后,对文件使用 bash -x 以查看其运行。仔细阅读您的脚本并修复语法错误。
一些错误:
echo "last print line: `cat mqtt.csv | tail -1"
echo $"Usage: $0 {start|stop|restart|reload|status}"
# missing ;;
我不再关注 3。还要注意,指定可执行文件的路径是正常的,通常带有变量。执行“txt”文件也不正常。您也没有告诉用户您支持 'condrestart' 。