硬件: 树莓派 Raspberry 3B+
系统: Raspbian GNU/Linux 9 (stretch)
内核: Linux raspberrypi 4.14.93-v7+ #1189 SMP, armv7l GNU/Linux
说明: 改用 linux C 程序优化实现此 shell 功能, 参见 "LINUX USB 多串口通讯之二: 动态获取当前所有 USB 串口设备通道名称"
脚本内容
$vi /var/www/html/bt5net/check_ttyACM_and_run_serial.sh
#!/bain/sh
flag_ttyACM8=$(ls /dev/ttyACM8 | grep -v "grep" | wc -l)
if [ $flag_ttyACM8 -ge "1" ]
then
sudo shutdown -r now
fi
flag_ttyACM9=$(ls /dev/ttyACM9 | grep -v "grep" | wc -l)
if [ $flag_ttyACM9 -ge "1" ]
then
sudo shutdown -r now
fi
flag_ttyACM=$(ls /dev/ttyACM* | grep -v "grep" | wc -l)
if [ $flag_ttyACM -ge "1" ]
then
echo $flag_ttyACM
flag_serial=$(ps -aux | grep "serial_ttyACM" | grep -v "grep" | wc -l)
if [ $flag_serial -ge "1" ]
then
echo "serial_ttyACM process exists, and can not reload!"
else
/var/www/usb-nrf52840/c-code/serial-sqlite3/serial_ttyACM
fi
else
echo "NOt USB-CDC-ACM DEVICE"
fi
系统 crontab 定时启动上述脚本
$ crontab -e
// 添加内容, 每2分钟检查一次
*/2 * * * * sh /var/www/html/bt5net/check_ttyACM_and_run_serial.sh
扩展
linux sheel 中符号表示:
大于 -gt (greater than)
小于 -lt (less than)
大于或等于 -ge (greater than or equal)
小于或等于 -le (less than or equal)
不相等 -ne (not equal)
crontab 工作指令字段说明
每项工作有六个字段分别是:
分钟 小时 日期 月份 周 指令
0-59 0-23 1-31 1-12 0-7 指令 #0和7都代表星期天
辅助特殊字符:
* (星号)代表任何时刻
,(逗号)代表分隔时候。如3点与6点 就是3,6
-(减号)代表一段时间范围内。如:3点到6点 就是3-6
/n(斜线)n代表数字,即每隔n单位。如每隔五分钟,/5
--------------------------------------------------
crontab参数:
-u:只有root才可能,帮其他用户建立或移除工作排程。
-l:查阅crontab的工作内容
-r:移除所有的crontab的工作内容,移除一项,用-e编辑。