export kibana_exec="nohup /data/kibana-main/bin/kibana > /data/logs/kibana/kibana.log 2>&1 "
if [ ! -f $kibana_exec ]; then
Это похоже на то, что приведет к ошибке [: слишком много аргументов
: $kibana_exec
расширяется до нескольких слов (пять, в заданном значении выше), которые не образуют осмысленного теста, поэтому [
выдает ошибку. Это не имеет особого смысла даже с [ ! -f "$kibana_exec"
, поскольку значение в переменной также не похоже на имя файла. Кроме того, если вы хотите использовать подстановку команд для запуска программы и захвата того, что она напечатает, вы должны использовать kibana_exec=$(command ...)
, но здесь это тоже не сработает, так как вы перенаправляете весь вывод в лог-файл.
Однако я не могу сопоставить номер строки (39) в сообщении об ошибке со сценарием. Насколько я могу судить, строка 39 — это export pid=$PIDFILE
, который, похоже, не должен выдавать ошибку.
Я не совсем уверен, что вы пытаетесь здесь сделать, должен ли kibana_exec
содержать только имя исполняемого файла (/data/kibana-main/bin/kibana
)? И если это так, возможно, вам следует использовать [-x "$kibana_exec"]
.
В функции stop()
kibana_exec
выглядит неустановленным, поэтому [ ! -f $kibana_exec ]
будет просто [ ! -f ]
проверяет, пусто ли -f
. Это не так, поэтому условная часть никогда не выполняется.
export PIDFILE="`(ps -eaf | grep kibana | awk '{print $2}')`"
export pid=$PIDFILE
Здесь grep
, вероятно, соответствует нескольким строкам в выводе ps
, а именно kibana
и самому grep
, поэтому окончательный вывод имеет два PID в две строки. Для них устанавливается pid
, и когда вы запускаете su -c "... $pid"
, оболочка, запущенная su
, видит две строки с второй только со вторым PID. Он пытается запустить это как команду, но не находит, и вы получаете что-то вроде 8197: команда не найдена
. строка 1
, упомянутая в сообщении об ошибке, очевидно, не является первой строкой полного скрипта, так что это также работает как подсказка, что она из другой оболочки, созданной внутри скрипта.
Что-то вроде pid=$(pgrep kibana)
может быть лучше (pgrep
не будет соответствовать самому себе) или pid=$(pgrep -d' ' kibana )
, чтобы разделить пространство PID, на случай, если их больше одного (так что su -c "kill $pid"
убьет их всех).
Работающая система Unix будет время от времени создавать временные файлы и каталоги во время нормальной работы.
Простое открытие файла в редакторе или отправка электронного письма могут привести к созданию одного или двух временных файлов, а просмотр веб-страниц может создать и удалить сотни файлов за короткий промежуток времени. Кроме того, графическая среда рабочего стола может выполнять кэширование и другие вещи, которые вы обычно не замечаете, создавая и удаляя временные файлы.
В зависимости от того, какой у вас главный каталог, вы вполне можете охватить каталоги, которые имеют тенденцию сильно меняться, например /tmp
и все каталоги в /var
, и ваш домашний каталог.
dirs — это список имен каталогов в текущем (корневом) каталоге, а files — это список имен файлов в текущем каталоге.
Я думаю, вам нужно что-то вроде этого:
def traverse(top):
filecount = 0
dircount = 0
for root, dirs, files in os.walk(top):
dircount += len(dirs)
filecount += len(files)
print("Num of dir: " + dircount)
print("Num of files: " + filecount)