есть баш-скрипт, передающий файлы. он запускается по крону к примеру раз в час.
так вот если файлов много, то он за час не успеет их передать, но тем не менее его новая копия все-равно по крону запуститься и у меня получится уже 2 работающих скрипта.
Хочу встроить в скрипт проверку, которая будет закрывать новую копию, если старая еще не завершилась.
в голову приходят 2 варианта:
1 - лок-файл
2 - список процессов.
С лок-файлом не супер решение как мне кажется, а вдруг скрипт глюкнет и лок-файл останется (не удалиться после завершения рабоыт скрипта), тогда новя копия его никогда не запутиться.
Со списком процессов вроде как-то надежнее. вот что придумал:
Код: Выделить всё
#!/bin/bash
echo $$
ps -ef | grep $(basename $0)
этот скрипт мне выдает вот такое:
Код: Выделить всё
kspus@stalin:/opt/ftproot> ./test.sh
32125
kspus 32125 31548 0 15:47 pts/3 00:00:00 /bin/bash ./test.sh
kspus 32127 32125 0 15:47 pts/3 00:00:00 /bin/bash ./test.sh
kspus 32128 32127 0 15:47 pts/3 00:00:00 basename ./test.sh
kspus@stalin:/opt/ftproot> ./test.sh
32129
kspus 32129 31548 0 15:47 pts/3 00:00:00 /bin/bash ./test.sh
kspus 32131 32129 0 15:47 pts/3 00:00:00 /bin/bash ./test.sh
kspus 32132 32131 0 15:47 pts/3 00:00:00 /bin/bash ./test.sh
kspus@stalin:/opt/ftproot> ./test.sh
32133
kspus 32133 31548 0 15:47 pts/3 00:00:00 /bin/bash ./test.sh
kspus 32135 32133 0 15:47 pts/3 00:00:00 grep test.sh
что-то как-то это не очень блин: то basename то grep то вообще непойми что вылазит....
Может кто уже решал такую задачку?