Как запустить скрипт автоматически в Linux?

Я использую командную строку Linux, и я - новичок с нею. Я создал два файла, test.sh и test.log. процесс является любым выводом, идущим в test.log и я получаю его успешно вывод в test.log. Я хочу запустить скрипт автоматически каждые 5 секунд и только для записи, если существует какое-либо изменение с .sh файл.

test.sh содержит:

#!/bin/bash
while [ true ] ;
do
echo "" date and Time >> test.log
date +%x_r >> test.log
lsusb >> test.log

sleep 5;
done

Мой вопрос: там какой-либо путь состоит в том, чтобы выполнить его автоматически и только добавить новое изменение в файле с новой датой? например, если кто-либо вставит USB-устройство в мою машину, то это добавит его с новой датой в существующий файл журнала он.

3
задан 16 November 2016 в 18:49

3 ответа

Это должно работать, это хранит последний вывод lsusb в $lastoutput и добавляет, если они - то, если не равняются

#!/bin/bash
while [ true ] 
do
    currentoutput="$(lsusb)"
    if [ "$currentoutput" != "$lastoutput" ]
    then
        echo "" date and Time >> test.log
        date +%x_r >> test.log
        lastoutput="$(lsusb)"
        lsusb >> test.log
    fi
    sleep 5
done
1
ответ дан 1 December 2019 в 22:20

Вы имеете к:

  • помещает Ваш файл в /etc/init.d, каталог
  • делает Ваш sh исполняемый файл файла (используйте эти chmod +x команда)

, Если это не работает правильно, создайте символьную ссылку своего файла к /etc/rc.d/:

ln -s /etc/init.d/test.sh /etc/rc.d/ 

май, который помогает :)

-1
ответ дан 1 December 2019 в 22:20

Вместо того, чтобы всегда регистрировать целый вывод lsusb, Вы могли использовать diff производить изменения только.

#!/bin/bash

logfile="test.log"
lsusbout_before=

while sleep 1; do
    lsusbout_now="$(lsusb)"
    diff=$(diff <(printf '%s\n' "$lsusbout_before") <(printf '%s\n' "$lsusbout_now"))
    if [ $? = 1 ]; then
        date | tee -a "$logfile"
        printf '%s\n' "$diff" | grep '^[<>]' | tee -a "$logfile"
        lsusbout_before="$lsusbout_now"
    fi
done

Каждый раз, когда что-то добавляется, diff выводы:

> ...

если что-то удалено, вывод

< ...

например, когда я присоединяю свою карту с интерфейсом USB:

Fr 12. Apr 10:55:48 CEST 2019
> Bus 002 Device 014: ID 8564:1000 Transcend Information, Inc. JetFlash

Этот сценарий использует diff код ошибки 1 если файлы отличаются.

  • <(command) дескриптор файла: генерирует файл в памяти с выводом command как введено, подобный $(command).
  • [ $? = 1 ] проверьте код ошибки последней команды (здесь: diff).
  • grep '^[<>]' должен подавить дополнительный вывод diff как положение изменений, которое не важно для нас.
0
ответ дан 1 December 2019 в 22:20

Другие вопросы по тегам:

Похожие вопросы: