В первую очередь я бы проверил приоритет процессов, запущенных на серверах.
ps -eo pid,ppid,ni,comm
Затем я бы изменил значение nice на самое высокое в вашем процессе node.js, чтобы увидеть, есть ли какие-либо улучшения.
renice -n -12 -p (PID вашего node.js)
Вот так (больше не используйте устаревшееexpr
):
dayleft=$(( arithmetic expression ))
Если вам нужны числа с плавающей запятой в bash , используйте вместо bc :
dayleft=$(bc -l <<< "scale=2; 100/3")
Как заявил Stéphane Chazelas в комментариях, ksh93
, zsh
и yash
поддерживают числа с плавающей запятой в пределах $((...))
и ((...))
.
expr
— это программа, используемая в древнем шелл-коде для выполнения математических операций. В оболочках Posix, таких как bash, используйте $(( expression ))
. В bash, ksh88+, mksh/pdksh или zsh вы также можете использовать (( expression ))
илиlet expression
((...))
— это арифметическая команда, которая возвращает статус выхода 0, если выражение не равно нулю, или 1, если выражение равно нулю. Также используется как синоним слова «пусть», если необходимы побочные эффекты (назначения ). См.http://mywiki.wooledge.org/ArithmeticExpression
$((...))
— арифметическая замена. После выполнения арифметических действий все это заменяется значением выражения. См.http://mywiki.wooledge.org/ArithmeticExpression
Подстановка команд:"$(cmd "foo bar")"
вызывает выполнение команды 'cmd' с аргументом 'foo bar', и "$(..)"
заменяется выходными данными. См.http://mywiki.wooledge.org/BashFAQ/002и http://mywiki.wooledge.org/CommandSubstitution
Избегайте использования переменных ВЕРХНИЙ РЕГИСТР , они зарезервированы для системного использования
expiryepoch=$(date --date="$expirydate" +%s)
todayepoch=$(date --date="$todaysdate" +%s)
dayleft=$(bc <<< "scale=2; (todayepoch - expiryepoch) / 86400")
Вы должны выйти за скобки, и между ними и цифрами должен быть пробел. В противном случае оболочка считает, что здесь нужно запустить подоболочку :
.DAYSLEFT=$(expr \( $EXPIRYEPOCH - $TODAYEPOCH \) / 86400 )