| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- #!/bin/bash
- #
- # Copyright (c) 2019 Clementine Computing LLC.
- #
- # This file is part of PopuFare.
- #
- # PopuFare is free software: you can redistribute it and/or modify
- # it under the terms of the GNU Affero General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # PopuFare is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU Affero General Public License for more details.
- #
- # You should have received a copy of the GNU Affero General Public License
- # along with PopuFare. If not, see <https://www.gnu.org/licenses/>.
- #
- # This script expects to be called as root from a cron job.
- #
- # This script will do some basic monitoring of different pieces
- # of the system.
- # If a problem is discovered, this program will attemp to report
- # and, potentially, try to fix them.
- #
- VERBOSE=2
- bindir=/home/bus/bin
- cfgdir=/home/bus/config
- i2cdev=/dev/i2c-1
- piddir=/tmp
- ptydir=/tmp
- logdir=/tmp
- popmonlog=/tmp/popmon.log
- if [[ "$VERBOSE" -gt 0 ]] ; then
- ts=`date -u +'%s.%N'`
- echo "# $ts [$$] popufare_monitor running" >> $popmonlog
- fi
- function setup_PIU_socat() {
- if [[ -e $piddir/socat.pid ]] ; then
- _p=`cat $piddir/socat.pid`
- if [[ -e /proc/${_p} ]] ; then kill -9 $_p ; fi
- rm -f $piddir/socat.pid
- fi
- rm -f /dev/ttyPIU
- rm -f $ptydir/ttyPIUich
- if [[ "$VERBOSE" -gt 0 ]] ; then
- ts=`date -u +'%s.%N'`
- echo "# $ts [$$] popufare_monitor: starting socat" >> $popmonlog
- fi
- socat -d -d pty,raw,echo=0,link=$ptydir/ttyPIUich pty,raw,echo=0,link=/dev/ttyPIU > $logdir/socat.log 2>&1 &
- echo "$!" > $piddir/socat.pid
- }
- function setup_I2C_PIU_bridge() {
- if [[ -e $piddir/ichthyic.pid ]] ; then
- _p=`cat $piddir/ichthyic.pid`
- if [[ -e /proc/${_p} ]] ; then kill -9 $_p ; fi
- rm -f $piddir/ichthyic.pid
- fi
- if [[ "$VERBOSE" -gt 0 ]] ; then
- ts=`date -u +'%s.%N'`
- echo "# $ts [$$] popufare_monitor: starting ichthyic i2c to PIU bridge" >> $popmonlog
- fi
- $bindir/ichthyic-passthrough --i2c $i2cdev --pty $ptydir/ttyPIUich -v -v -L $logdir/ichthyic.log >> $popmonlog 2>&1 &
- echo "$!" > $piddir/ichthyic.pid
- }
- # If we have an appropriate drop file and I2C is enabled,
- # make sure socat is running and our shim program is running.
- #
- if [[ -e $cfgdir/popufare.ichthyic && -e $i2cdev ]] ; then
- ## make sure socat is running to tie ttyPIU to ttyPIUich
- ## together
- ##
- if [[ ! -e $piddir/socat.pid ]] ; then
- setup_PIU_socat
- fi
- p=`cat $piddir/socat.pid`
- if [[ ! -e /proc/${p} ]] ; then
- if [[ "$VERBOSE" -gt 1 ]] ; then
- ts=`date -u +'%s.%N'`
- echo "## $ts [$$] stale socat.pid file? no process id found for $p" >> $popmonlog
- fi
- setup_PIU_socat
- fi
- ## Now run the shim program to connect the I2C to the ttyPIUich line
- ##
- if [[ ! -e $piddir/ichthyic.pid ]] ; then
- setup_I2C_PIU_bridge
- fi
- p=`cat $piddir/ichthyic.pid`
- if [[ ! -e /proc/${p} ]] ; then
- if [[ "$VERBOSE" -gt 1 ]] ; then
- ts=`date -u +'%s.%N'`
- echo "## $ts [$$] stale ichthyic.pid file? no process id found for $p" >> $popmonlog
- fi
- setup_I2C_PIU_bridge
- fi
- fi
- if [[ "$VERBOSE" -gt 0 ]] ; then
- ts=`date -u +'%s.%N'`
- echo "# $ts [$$] popufare_monitor finished" >> $popmonlog
- fi
- exit 0
|