Как Вы упростили бы эту команду?

У меня была та же проблема. Вот то, что я вызвал в воображении в соответствии с другими рекомендациями, init.d учебные руководства и существующий debian сценарий, найденный на lsyncd googlecode текст ссылки сайта. Надежда это помогает другим, просто копия, и вставьте!

#!/bin/bash
#
# lsyncd        This shell script takes care of starting and stopping
#               lsyncd (the Live Syncing (Mirror) Daemon)
#
# Author: Randy Reddekopp not-public@usask.ca
#
# chkconfig: 2345 13 87
# description: Lsyncd uses rsync to synchronize local directories with a remote \
#    machine running rsyncd. It watches multiple directories trees \
#    through inotify. The first step after adding the watches is to \
#    rsync all directories with the remote host, and then sync single \
#    file by collecting the inotify events. So lsyncd is a light-weight \
#    live mirror solution.
# pidfile: /var/run/lsyncd.pid
# processname: lsyncd

# Source function library.
. /etc/init.d/functions

PIDFILE="/var/run/lsyncd.pid"
LSYNCD_DIR="/usr/local/bin/"

start() {
        echo -n "Starting Live Syncing Daemon: "
        if [ -f $PIDFILE ]; then
                PID=`cat $PIDFILE`
                echo lsyncd already running: $PID
                exit 1;
        else
                cd $LSYNCD_DIR
                daemon ./lsyncd $OPTIONS
                RETVAL=$?
                echo
                [ $RETVAL -eq 0 ] && touch /var/lock/subsys/lsyncd
                return $RETVAL
        fi

}

stop() {
        echo -n "Shutting down Live Syncing Daemon: "
        echo
        killproc lsyncd
        echo
        rm -f /var/lock/subsys/lsyncd
        return 0
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status lsyncd
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo "Usage:  {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $?

Вставка тот код в/etc/init.d/lsyncd.

Полномочия файла изменения:

chmod 755/etc/init.d/lsyncd

В Вашем файле /etc/lsyncd.conf.xml необходимо не прокомментировать" " узел и установить его атрибут имени файла на "/var/run/lsyncd.pid".

Затем Вы должны быть установлены запустить сервис!

/sbin/service lsyncd запускаются

С наилучшими пожеланиями, Randy

10
задан 20 June 2012 в 18:40
4 ответа

Я могу немного улучшить Марка Хендерсона, используя $ () вместо `и удалив grep с помощью более совершенного sed:

sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -antlp | \
   sed -e "/telnet/s/^.*ESTABLISHED\ \|\/.*$//g")

Лично я считаю, что обратные кавычки затрудняют чтение; кроме того, они не вложены, в отличие от синтаксиса $ ()

1
ответ дан 2 December 2019 в 22:14

strace -p $ (ss -npt | sed -n "/: $ (ss -npt | sed -n '/telnet/s/^.*\?:\([0 -9] \ + \). * / \ 1 / p ') \ + u / s /.*, \ (. * \),. * / \ 1 / p ")

Пока у вас есть только один telnet работает, это будет strace соответствующий сервер, если он есть.

Если его нет ( например вы telnet ed на внешний сервер последним), strace завершится ошибкой с strace: option требует аргумента - 'p'

2
ответ дан 2 December 2019 в 22:14
strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+' 
"/\/telnet/{print \$5}") /&&/apache2/{print \$7}")

Или отформатирован для облегчения чтения и с неповрежденными флагами strace OP:

sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5}") / && /apache2/ {print \$7}")

Разбивка, вначале внутреннее:

netstat -tnp | awk -F'[ :]+' "/\/telnet/ {print \$5}"

Покажи мне, без преобразования IP-адресов в имена DNS, все активные TCP-соединения. Передайте это в awk, который печатает пятое поле в любой строке, оканчивающейся на / telnet , где поля разделены одним или несколькими пробелами и двоеточиями. Это поле будет исходным портом.

Для улучшения : Можно сделать более надежным, добавив | head -n 1 до конца или ; exit внутри функциональной части awk, но в вашей исходной версии не было эквивалента, поэтому я не хотел делать эту длиннее.

netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \$7}")

**** здесь - это та часть, которую я уже объяснил выше. Здесь я' m ищет любую строку в netstat -tnp , которая имеет тот же порт, что и исходный порт, который я обнаружил выше, и принадлежит Apache; когда я его нахожу, я печатаю седьмое поле (разделенное одним или несколькими пробелами или косыми чертами). Это PID дочернего элемента Apache.

Для улучшения : помимо возврата только одного PID (с помощью тех же методов, что и выше), самое большое, что я могу себе представить, - это быть более разборчивым, когда дело доходит до фактического соответствия dport в отличие от чего-то еще, что просто так совпало с шаблоном. Это было бы легко сделать, добавив двоеточия к FS ( -F ), но проблема возникает в смешанных ситуациях IPv4 и IPv6, когда в самом адресе могут быть двоеточия, что может надоедает довольно быстро. Это выглядело чертовски надежно, особенно с задним пространством.

sudo strace -o /tmp/strace -f -s4096 -r -p

Это прямая копия вашего исходного вопроса; Я не менял его ни в малейшей степени.

Если вы позволите мне добавить несколько дополнительных символов, я бы запустил следующую версию:

sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5;exit}") / && /apache2/ {print \$7;exit}")
1
ответ дан 2 December 2019 в 22:14

Попробуйте это, надеюсь, это поможет:

sudo strace -o /tmp/strace -f -s4096 -r -p `netstat -antlp | \
  grep telnet | sed -e "s/^.*ESTABLISHED\ \|\/.*$//g"`
0
ответ дан 2 December 2019 в 22:14

Теги

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