2012-04-18 3 views
0

Итак, у меня есть 3 сервера, s1, s2 и d1, где d1 - сервер samba. Процесс, который у меня есть, заключается в том, что скрипт, запущенный на s1, генерирует файлы и копирует их в d1, s2, затем берет эти файлы из d1 и запускает на них некоторые процессы.Bash script: проверьте, открыт ли общий файл на другом сервере

Моя проблема в том, что на s2 мне нужно убедиться, что s1 полностью закончил запись файла на d1, прежде чем я его заберу. Это иногда большие файлы, поэтому возможно, что на основе установки crontab, которую я имею на s2, там может быть перекрытие, где s1 все еще пытается скопировать файл, когда s2 готов забрать его.

Моим первым наклонением было использование lsof, но это только говорит мне, какие файлы используются сервером, выполняющим эту команду, а не если другой сервер использует этот файл. любые идеи о том, как я могу проверить этот файл?

+0

Что о 'flock'? Блокировка работает над NFS, но, честно говоря, я понятия не имею о самбе. – FatalError

+0

@FatalError, так что вы говорите, что, когда s1 копирует файл, используйте flock, чтобы заблокировать файл, чтобы s2 не смог получить к нему доступ? Я не думаю, что я могу использовать любые команды, связанные с samba, так или иначе, так как они должны запускаться из d1. –

ответ

0

, если у Вас есть свой локальный компьютер и открытый ключ пользователя в удаленной машине и файл authorized_keys пользователя, вы можете запустить LSOF через SSH и Grep для файла

ssh [email protected] lsof | grep filename 
if [ $? -eq 0 ] 
    then 
     docommand 
    else 
     dontdoit 
fi 
+0

Это определение возможного решения, но это одна из тех вещей, где я никогда не доверял этому типу доступа в целом для точки безопасности. в любое время я могу сделать ssh во что-то, из-за которого нужно предоставить учетные данные. Мне всегда кажется, что система небезопасна. но что-то я могу узнать более точно –

+0

работает, только если у вас есть доступ к определенной учетной записи на определенной машине с определенным открытым ключом, и этот ключ зарегистрирован на целевой машине. По сути, ваша безопасность - это защита этой учетной записи. С этой точки зрения, это примерно так же безопасно, как и sudo, но не дает учетной записи root. Чтобы заблокировать его, вы можете отредактировать файл разрешений хостов, чтобы разрешить только этот компьютер (и пользователь, если хотите). – TaoJoannes