Как перезапустить направляющие из направляющих?

Когда вы пишете команду wc -l < file1.txt > file1.txt, ваша оболочка сначала прочитает команду целиком и перенаправит стандартный ввод, выводимый с / на file1.txt.

Затем, когда файл открыт для записи с использованием >, если файл существует, он будет перезаписан и будет создан пустой файл. затем процесс (ваш wc) начнет выполнение и запишет его до конца выполнения.

Однако ваш wc -l должен будет прочитать файл и сосчитать количество строк в нем, так как файл пуст (перезаписан), он просто поместит в него дамп:

   0 file1.txt

Чтобы доказать это посмотрите, что происходит в режиме добавления, используя >>

$ cat file1.txt
a
b
b
$ wc -l file1.txt 
       3 file1.txt
$ wc -l file1.txt >> file1.txt 
$ cat file1.txt 
a
b
b
       3 file1.txt

Содержимое вашего файла не повреждено, и wc правильно считывает количество строк перед добавлением результата в файл.

Примечание:

В общем, никогда не рекомендуется писать и читать в одном и том же файле, за исключением случаев, когда вы точно знаете, что делаете. Некоторые команды имеют опцию inline для изменения файла во время выполнения команды, и настоятельно рекомендуется использовать их, поскольку файл не будет поврежден, даже если команда вылетает в середине выполнения.

6
задан Community 23 May 2017 в 12:34
поделиться

3 ответа

Хорошо я нашел фиксацию... Я изменился, как я запускаю направляющие к:

mongrel_rails start -d

и теперь следующее действие сделает это:

def restart
  fork { exec "mongrel_rails restart" }
  redirect_to "/server_maintenance"
end

Как протест, redirect_to вызовет неудавшуюся загрузку, потому что сервер снизится... однако на перезагрузку после того, как пауза покажет, что перезапуск был успешен. Это могло быть зафиксировано путем изменения перезапуска, который будет сделан с Ajax, сопровождаемым перезагрузкой JavaScript..., но я оставлю это как осуществление читателю.

3
ответ дан 17 December 2019 в 00:14
поделиться

Если Вы не возражаете переключаться на mod_rails, можно перезапустить сервер путем создания $RAILS_ROOT/tmp/restart.txt, который вызывает только экземпляр направляющих, о котором Вы заботитесь собирающийся перезапуск.

Ваша внешность команды PS (cursorary взгляд) как он уничтожит все процессы направляющих на Вашем поле. Это прекрасно, если Вы - единственное приложение для направляющих на машине, но если существуют некоторые работающие как тот же пользователь, или Вы работаете как корень, Вы уничтожите их всех. Невоспитанность!

Это указывает на это для полукровки. Существует способ, которым Вы хотите попробовать.

4
ответ дан 17 December 2019 в 00:14
поделиться

В нашем консалтинге со стартапами, выполняющими их сайты на направляющих, мы использовали два метода для руководящих процессов полукровки.

Во-первых, пользовательский драгоценный камень, который мы записали названному mongrel_runit. Это настраивает полукровок как сервисы в runit.

Во-вторых, мы использовали бога для контроля процессов полукровки. Это будет работать с mongrel_runit, или с 'нормальными' конфигурациями полукровки.

0
ответ дан 17 December 2019 в 00:14
поделиться
Другие вопросы по тегам:

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