У меня была такая же проблема (acroreader запускается только с правами root) на linux mate x64 с ldap.
Только что установил libnss-ldap: i386, и он без проблем работал как пользователь ldap.
У меня похожая ситуация. Моя цель состоит в том, чтобы иметь решение, которое будет очень просто поддерживать для тех, кто не -unix.
Когда мой сервер Linux перезагружается, он запускает сценарий, который отправляет предупреждение. Но если это происходит в рамках нашего «окна обслуживания», который определяется как период между 23:00 субботы и 6:00 воскресенья, я не хочу отправлять страницу, потому что перезагрузка в течение этого окна разрешена (, применены исправления и т. д. ). Я протестировал его, и, насколько я могу судить ), он работает так, как предполагалось (.
Вот календарь для справки:
June 2018
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Вот мой тестовый код:
FMT='+%k:%a' # i.e. Sat:23 for Saturday at 11pm local time
TESTDATE1=$(date -d '2018-06-23 14:30:00' $FMT)
TESTDATE2=$(date -d '2018-06-23 23:59:59' $FMT)
TESTDATE3=$(date -d '2018-06-24 00:00:00' $FMT)
TESTDATE4=$(date -d '2018-06-24 05:59:59' $FMT)
TESTDATE5=$(date -d '2018-06-24 08:01:00' $FMT)
for VAL in "${TESTDATE1}" $TESTDATE2 $TESTDATE3 $TESTDATE4 $TESTDATE5
do
#extract the 24 hour value and the day
HH="$(echo ${VAL} | cut -d':' -f1)"
DAY="$(echo ${VAL} | cut -d':' -f2)"
echo Testing $VAL $HH $DAY
if [[ "$DAY" = "Sat" && $HH -ge 23 ]]; then
echo ' Shhhh People are trying to sleep... Sat window'
elif [[ "$DAY" = "Sun" && $HH -le 6 ]]; then
echo ' People are trying to sleep... Sun window'
else
echo ' PAGE SOMEONE - time is outside the Maintenance Window'
fi
done
Вот результат
Testing 14:Sat 14 Sat
PAGE SOMEONE - time is outside the Maintenance Window
Testing 23:Sat 23 Sat
Shhhh People are trying to sleep... Sat window
Testing 0:Sun 0 Sun
People are trying to sleep... Sun window
Testing 5:Sun 5 Sun
People are trying to sleep... Sun window
Testing 8:Sun 8 Sun
PAGE SOMEONE - time is outside the Maintenance Window
Вы можете преобразовать время в секунды с начала «этого» дня, а затем проверить, что значение секунд больше23*60*60
(82800 )или меньше6*60*60+30*60
(23400 ).
Чтобы получить секунды с начала «этого» дня, вы можете:
secsSinceMidnight=$(( $(date +%s) - $(date -d '00:00:00' +%s) ))
И испытание будет:
[[ $secsSinceMidnight -lt 23400 || $secsSinceMidnight -gt 82800 ]] && echo YES
Подсказка :Ответ муру выше работал у меня, но вместо || (трубы, "или" ), мне пришлось использовать оператор && ("и" ).
вот так :if [[ "$currenttime" > "23 :00" ]] && [[ "$currenttime" < "06 :30" ]]
В данном конкретном случае альтернативой упрощению теста является добавление часа и один тест менее чем07:30
if [[ $(date -d "now + 60 minutes" +'%H:%M') < "07:30" ]]
then echo "wake up"
else
echo "Zzzzzz"
fi
Другое возможное решение. Это будет работать, если вы пересечете полночь или нет. Функция возвращает true, если время находится между интервалами. (В противном случае false ). См. примеры в тестовых частях.
#! /bin/bash
date_between() {
TIME=$1
FROM=$2
TO=$3
RESULT=false
if [[ "$FROM" < "$TO" ]]; thenFROM < $TIME) || ($TIME < $TO) ]]; then
RESULT=true
fi
fi
echo $RESULT
}
test_date_between_human
if [[ ("$FROM" < "$TIME") && ("$TIME" < "$TO") ]]; then
RESULT=true
fi
else
if [[ ("$FROM" < "$TIME") || ("$TIME" < "$TO") ]]; then
RESULT=true
fi
fi
echo "$RESULT"
}
test_date_between_human_readable_time_in_range() {
assertTrue $(date_between '07:10' '07:00' '07:15')
}
test_date_between_human_readable_time_out_of_range() {
assertFalse $(date_between '07:40' '07:00' '07:15')
}
test_date_between_human_readable_over_midnight_time_in_range() {
assertTrue $(date_between '23:30' '23:00' '01:00')
}
test_date_between_human_readable_over_midnight_time_out_of_range() {
assertFalse $(date_between '07:00' '23:00' '01:00')
}
. shunit2
Выполнить:
./date_test.sh
test_date_between_human_readable_time_in_range
test_date_between_human_readable_time_out_of_range
test_date_between_human_readable_over_midnight_time_in_range
test_date_between_human_readable_over_midnight_time_out_of_range
Ran 4 tests.
OK