|
|
Subject:
Linux shell commands to atomically repoint existing symlink
Category: Computers > Operating Systems Asked by: glmcrs-ga List Price: $10.00 |
Posted:
26 May 2005 18:27 PDT
Expires: 28 May 2005 11:22 PDT Question ID: 526119 |
In order to update my website files without disturbing any users, I need to atomically repoint an existing symbolic link from one folder to another. Let's say we have this in /www/vhosts: lrwxrwxrwx 1 user user 36 May 26 08:12 domain.com -> /www/vhosts/folder_a drwxrwxr-x 10 user user 4096 Dec 30 01:37 folder_a drwxrwxr-x 10 user user 4096 Dec 30 01:37 folder_b I need the proper unix shell command(s) to ATOMICALLY repoint the domain.com symlink from folder_a to folder_b. I have tried to do it in one step with: ln -nsf /www/vhosts/folder_b /www/vhosts/domain.com BUT the -f flag, which forces unlink of the destination if it exists, seems to be breaking the atomicity of the process. I have seen several errors generated at the exact time the ln takes place which leads me to believe that there is a fraction of a second when the domain.com symbolic link does not exist -- after it has been removed and before the new symbolic link has been created. I need an atomic solution to this problem. I have unsuccessfully tried a several step solution using the mv and rename commands with no luck. With the mv command, I created a temporary symlink pointing to folder_b and tried to do: mv /www/vhosts/temp.symlink.to.folder_b /www/vhosts/domain.com BUT this resulted in moving the temporary symlink inside the /www/vhosts/folder_a (which is where the domain.com symlink points) instead of overwriting the symlink. The attempt at renaming a temporary symlink over an existing symlink did not work and resulted in no change in the directory. Please help! This has to be possible and should be really simple but I have not been able to figure it out. Thanks in advance. |
|
There is no answer at this time. |
|
Subject:
Re: Linux shell commands to atomically repoint existing symlink
From: bozo99-ga on 27 May 2005 15:30 PDT |
Running "ln -nsf" under strace indeed shows the sequence of calls with small gaps between symlink("bbb", "mysymlink") = -1 EEXIST (File exists) unlink("mysymlink") = 0 symlink("bbb", "mysymlink") = 0 Does it need to be done from shell and not perl ? Then you could use a rename(2) system call rather than a rename(1) command. In Perl: symlink("bbb", "mynewsymlink"); # new temp link not yet in use rename("mynewsymlink", "mysymlink"); # atomic |
Subject:
Re: Linux shell commands to atomically repoint existing symlink
From: glmcrs-ga on 27 May 2005 18:19 PDT |
Perl could possibly be used, as a last resort scenario though. Any idea if PHP's rename() function work in the same manner as Perl's? |
If you feel that you have found inappropriate content, please let us know by emailing us at answers-support@google.com with the question ID listed above. Thank you. |
Search Google Answers for |
Google Home - Answers FAQ - Terms of Service - Privacy Policy |