Когда вы пишете команду 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
для изменения файла во время выполнения команды, и настоятельно рекомендуется использовать их, поскольку файл не будет поврежден, даже если команда вылетает в середине выполнения.
Хорошо я нашел фиксацию... Я изменился, как я запускаю направляющие к:
mongrel_rails start -d
и теперь следующее действие сделает это:
def restart
fork { exec "mongrel_rails restart" }
redirect_to "/server_maintenance"
end
Как протест, redirect_to вызовет неудавшуюся загрузку, потому что сервер снизится... однако на перезагрузку после того, как пауза покажет, что перезапуск был успешен. Это могло быть зафиксировано путем изменения перезапуска, который будет сделан с Ajax, сопровождаемым перезагрузкой JavaScript..., но я оставлю это как осуществление читателю.
Если Вы не возражаете переключаться на mod_rails, можно перезапустить сервер путем создания $RAILS_ROOT/tmp/restart.txt, который вызывает только экземпляр направляющих, о котором Вы заботитесь собирающийся перезапуск.
Ваша внешность команды PS (cursorary взгляд) как он уничтожит все процессы направляющих на Вашем поле. Это прекрасно, если Вы - единственное приложение для направляющих на машине, но если существуют некоторые работающие как тот же пользователь, или Вы работаете как корень, Вы уничтожите их всех. Невоспитанность!
Это указывает на это для полукровки. Существует способ, которым Вы хотите попробовать.
В нашем консалтинге со стартапами, выполняющими их сайты на направляющих, мы использовали два метода для руководящих процессов полукровки.
Во-первых, пользовательский драгоценный камень, который мы записали названному mongrel_runit. Это настраивает полукровок как сервисы в runit.
Во-вторых, мы использовали бога для контроля процессов полукровки. Это будет работать с mongrel_runit, или с 'нормальными' конфигурациями полукровки.