Назад | Перейти на главную страницу

Изменение символической ссылки во время работы программы, побочный эффект?

У нас есть индивидуальная программа (test), чтобы использовать следующую структуру, например

 myapp
 myapp\version1\
 myapp\version1\test
 myapp\version1\logs\..
 myapp\version2\test
 myapp\version2\logs\..
 myapp\running -> version1

И мы так бегаем

 ./mysqpp/running/test

В running символическая ссылка в настоящее время указывает на версию 1, мы хотим изменить символическую ссылку на версию 2, когда программа запущена, будет ли какой-либо побочный эффект?

(Мы не хотим прерывать текущую службу, просто хотим, чтобы при следующем перезапуске сервера использовалась версия 2)

От четких зависит:

Само запущенное в данный момент приложение не будет затронуто напрямую, поскольку оно загружается в оперативную память и поддерживается своим индексным дескриптором на диске. Так что это нормально.

Проблема в том, что если myapp/version1/test обращается к некоторым файлам по пути и использует myapp/running/logs/datafile для доступа к файлу. И это тоже проблема, только если приложение открывает файл после изменения символической ссылки. Если это произойдет, он, конечно, внезапно откроет файлы в myapp/version2.

Такой короткий ответ: если myapp/version1 имеет какое-либо упоминание по имени на «работает», я бы не стал менять символическую ссылку.

Примечание. Чтобы все изменилось при следующей перезагрузке, вы можете добавить какой-нибудь скрипт загрузки init.d или какую-нибудь штуку cron @boot.