X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=usr_bin%2Fgrml-screen;h=55de1c8387487339eaad3f02fee3e9ec8a637b3f;hb=1614f32fd13d96afaad3bb74b3f51fe18b507265;hp=7deeb770928482505deac1f49668848a3caba42e;hpb=f9835a0551733e1540cf826f2a520ee96c342718;p=grml-scripts-core.git diff --git a/usr_bin/grml-screen b/usr_bin/grml-screen index 7deeb77..55de1c8 100755 --- a/usr_bin/grml-screen +++ b/usr_bin/grml-screen @@ -15,38 +15,46 @@ sudo chown $USER.tty $TTY # FIXME: fix for screen race-conditions -PID_FILE_="/var/run/grml-screen" +PID_FILE_="/var/lock/grml-screen" +PID_FILE_CREATED_="false" MY_PID_="$$" if [ ! -d "/var/run/screen/S-$USER" ]; then # no /var/run/screen/S-$USER and possible no /var/run/screen either -> locking for i in `seq 40`; do # 40*0.25 = 10 seconds if lockfile-create --retry 0 $PID_FILE_; then echo $MY_PID_ >$PID_FILE_ + PID_FILE_CREATED_="true" break + else + PID_FILE_CREATED_="error" fi sleep 0.25 done fi -if [ -f $PID_FILE_ ]; then +if [ $PID_FILE_CREATED_ = "true" ]; then # FORK BEGIN ( - for i in `seq 40`; do # 40*0.25 = 10 seconds - if [ ! -d "/var/run/screen/S-$USER" ]; then - sleep 0.25 # educated guess - else - break + for i in `seq 40`; do # 40*0.25 = 10 seconds + if [ ! -d "/var/run/screen/S-$USER" ]; then + sleep 0.25 # educated guess + else + break + fi + done + if [ `cat $PID_FILE_` = $MY_PID_ ]; then + rm $PID_FILE_ + lockfile-remove $PID_FILE_ fi - done - if [ `cat $PID_FILE_` = $MY_PID_ ]; then - rm $PID_FILE_ - lockfile-remove $PID_FILE_ - fi )& # FORK END -else +elif [ $PID_FILE_CREATED_ = "error" ]; then SLEEP_TIME_="$(( $$ % 5 * 5 + 5 ))" echo "grml-screen: Error could not create lockfile! (sleeping for $SLEEP_TIME_)" sleep $SLEEP_TIME_ +elif [ $PID_FILE_CREATED_ = "false" ]; then + echo "nothing to do" &>/dev/null +else + echo "grml-screen: internal error - PID_FILE_CREATED_ == \"$PID_FILE_CREATED_\"" fi # now run screen with config