Предотвратите init демона, отзывающегося эхом на TTY

Используйте эту остроту

for i in *; do if [ ! -f $i ]; then echo "skipping $i"; else newname=`head -1 $i | sed 's/^\s*\([a-zA-Z0-9]\+\).*$/\1/'`; [ -n "$newname" ] && mv -i $i $newname.txt || echo "error at: $i"; fi; done

Это заменит все файлы первым словом в том файле + .txt. Я определил первое слово, чтобы быть первым вхождением [a-zA-Z0-9]+, отбрасывание ведущих пробелов.
Отказ от ответственности: Просто используйте его, если Вы уверены, что существует первое слово на строке один в каждом файле! Иначе Вы могли бы испытать неожиданные результаты ;-)

0
17.01.2012, 02:28
3 ответа

Вы смешиваете три команды: deamon, perl и /home/nuthan/program/server без любых кавычек. Думайте о следующем: Как каждый из них знает, какой из параметров он должен интерпретировать?

Синтаксис, который Вы использовали, мог, вероятно, только быть правильно интерпретирован, если:

  • deamon рассматривал бы все после -18 быть командой для выполнения
  • perl интерпретировал бы только первый параметр (/home/nuthan/program/server) как сценарий для выполнения, и все, что следует как параметры, передало тому сценарию

Я могу предложить две вещи устранить проблемы:

  1. Удостоверьтесь, необходимо ли звонить perl явно. Если server сценарий содержит надлежащее объявление интерпретатора (вероятно, /usr/bin/perl) на его первой строке, и это имеет исполняемый набор битов, Вы не должны должны быть явно звонить perl.
  2. Проверьте синтаксис daemon команда. Если это указывает что все после -18 (в Вашей команде), должен рассматриваться как полную команду для выполнения, затем она в порядке. Иначе Вам, возможно, или понадобилось бы ко всему, что следует в кавычках, или помещенный создают дополнительную функцию или сценарий обертки, который выполнил бы Вашу всю команду - так вся командная строка, которую Вы записали, был бы изменен на daemon -18 your_function или daemon -18 /path/to/your/wrapper_script.sh.
2
28.01.2020, 02:38
  • 1
    ... наконец, демон и жемчуг должны быть разделены с помощью кавычек: daemon -18 "perl /home/nuthan/program/server >/dev/null -d -v -r -f -O=/var/log/vts.log --daemon" 2>&1 1>/home/nuthan/program/vts.log & Это хорошо работало. –  nuthan 16.01.2012, 14:28
daemon -18 perl /home/nuthan/program/server -d -v -r -f -O=/var/log/vts.log --daemon
RETVAL=$? 2>&1 1>/some/where/over_the_rainbow

Но обратите внимание на то, что похоже, что-O должен уже сделать это часть вида, как должен тот "демон", таким образом, могло быть больше ti это, чем кажется на первый взгляд.

0
28.01.2020, 02:38
  • 1
    спасибо за ответ. Теперь,/some/where/over_the_rainbow регистрирует операторы печати. Но, тем не менее я не могу отсоединить tty от демона. Не знайте почему!!! перенаправление –  nuthan 16.01.2012, 13:16

Вы преодолели бы это путем перенаправления stdout к пропасти (/dev/null) и перенаправление stderr туда, где stdout перенаправляется. /dev/null отбрасывания все это получает. Таким образом, что-то вроде этого могло работать:

daemon -18 perl /home/nuthan/program/server -d -v -r -f -O=/var/log/vts.log --daemon >/dev/null 2>&1
0
28.01.2020, 02:38
  • 1
    к/dev/null не работает. я не могу отсоединить tty от демона. большое спасибо –  nuthan 16.01.2012, 13:46

Теги

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