Questo può essere fatto facilmente usando watch
anche senza utilizzare alcuno script.
watch -t -n 10 "(date '+TIME:%H:%M:%S' ; ps aux | grep "pattern" | wc -l) | tee -a logfile"
Per fare ciò che stai cercando, un semplice script (come ha sottolineato @Ignacio) dovrebbe fare al caso tuo:
while true
do
echo "$(date '+TIME:%H:%M:%S') $(ps aux | grep "pattern" | wc -l)" | tee -a logfile
sleep 2
done
Uso tee
invece di >>
in modo che tu possa vedere l'output sul tuo terminale e catturarlo nel tuo registro.
watch
è pensato per l'output su un display. Se vuoi semplicemente eseguire un comando ogni X secondi, allora dovresti semplicemente usare un ciclo di ritardo.
while true ; do somecommand ; sleep 2 ; done