Хорошо не точно формат Вы хотите, но как насчет
stat -c %y /etc/motd
=>
2011-03-08 11:39:20.000000000 +0000
и затем используйте то, что Вы предпочитаете приносить той метке времени в форму.
Править
Я принимаю OpenSolaris или Солярис 11 где версия GNU stat
связывается.
Вызовите оболочку явно.
flock -x -w 5 ~/counter.txt sh -c 'COUNTER=$(cat counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'
Обратите внимание, что любая переменная, которую Вы заменяете, локальна для того экземпляра оболочки. Например, COUNTER
переменная не будет обновлена в сценарии выполнения вызова: необходимо будет считать его назад из файла (но это, возможно, изменилось тем временем), или как вывод команды:
new_counter=$(flock -x -w 5 ~/counter.txt sh -c 'COUNTER=$(cat counter.txt); echo $((COUNTER + 1)) | tee ~/counter.txt')
Или вы можете запустить дескриптор файла
exec {counterfd}<~/counter.txt
flock -x -w 5 "$counterfd"
COUNTER=$(cat ~/counter.txt)
COUNTER=$(( COUNTER +1 ))
echo "$COUNTER" >~/counter.txt
exec {counterfd}<&-
Это также имеет то преимущество, что позволяет вам использовать переменную счетчика напрямую, в отличие от подходов, основанных на подшивках.
Инструмент flock
немного сложен в использовании, а справочная страница довольно короткая. Страница руководства предоставляет три способа использования инструмента:
flock [options] <file|directory> <command> [command args]
flock [options] <file|directory> -c <command>
flock [options] <file descriptor number>
При такой формулировке вопроса я определенно использовал бы третью форму flock
. Если вы пойдете дальше на справочной странице для flock
, вы найдете несколько примеров, которые показывают точный синтаксис для использования третьей формы:
#!/bin/bash
(
flock -n 9 || exit 1
echo "commands executed under lock..."
echo "go here..."
) 9>/tmp/mylockfile
Я добавил #!/bin/bash
.
Я успешно использовал эту форму flock
.
У меня был интересный вариант использования. Мне приходилось запускать свой скрипт на Python как cronjob, используя flock, каждые 30 минут.И из-за некоторых вещей, связанных с корневым путем, внутри моего скрипта Python вместо
python /home/myfolder/script.py
Мне нужно было сделать
cd /home/myfolder/ && python script.py
Чтобы передать обе команды в crontab-
*/30 * * * * cd /home/myfolder/ /usr/bin/flock -w 0 /home/myfolder/my-file.lock && python my_script.py > /dev/null 2>&1
Мне помогло.