ntpdate
не сбрасывает флаг STA_UNSYNC
при настройке системного времени. Таким образом, ядро считает, что системное время недействительно, и не обновляет RTC. Он не очищает STA_UNSYNC
, потому что он использует adjtime ()
для установки системного времени вместо adjtimex ()
.
Чтобы использовать функцию CONFIG_RTC_SYSTOHC
, вы должны использовать инструмент, который очищает флаг STA_UNSYNC
, то есть ntpd
.
Возможно, о проблеме следует сообщить разработчикам ntpdate
.
Это адаптация того, что предложил @phillip -zyan -k -lee -Stockmann , основанный на его коде «Лучшая идея на данный момент».
Мои изменения по сравнению с его (превосходным и полезным фрагментом )в основном:
Вот мой код того, что я назвалcrontab-add-hourly.sh
:
#!/bin/bash
# PURPOSE:
# To allow simple, programmatic addition of commands/entries into the crontab (if not already present)
cmd=$1
entry="0 * * * * $cmd"
printf "we want to add this entry:\n$entry\n\n"
escapedEntry=$(printf '%s\n' "$entry" | sed 's:[][\/.^$*]:\\&:g') #from: https://unix.stackexchange.com/a/129063/320236
printf "but first we'll see if it's already in there using this regex pattern:\n$escapedEntry\n\n"
if [[ $(crontab -l | egrep -v '^(#|$)' | grep -q "$escapedEntry"; echo $?) == 1 ]] # from: https://unix.stackexchange.com/a/297377/320236
then
printf "all clear; pattern was not already present; adding command to crontab hourly:\n$cmd\n\n"
(crontab -l ; printf "$entry\n\n") | crontab -
else
printf "pattern already present; no action taken\n\n"
fi
Пример использования и вывода:
$./crontab-add-hourly.sh my-script.bash
we want to add this entry:
0 * * * * my-script.bash
but first we'll see if it's already in there using this regex pattern:
0 \* \* \* \* my-script\.bash
all clear; pattern was not already present; adding command to crontab hourly:
my-script.bash
TL;DR :Это действительно работает, проверено в Bash 4.4.
if [[ $(crontab -l | egrep -v "^(#|$)" | grep -q 'some_command'; echo $?) == 1 ]]
then
set -f
printf "$(crontab -l ; echo '* * * * * some_command')\n" | crontab -
set +f
fi
Как отмечено в комментариях @Phillip -Zyan K Lee -Stockmann answer, это решение расширяет *
все файлы в текущем каталоге. Я не мог заставить комментарии работать. set -f отключает подстановочное расширение, см.https://stackoverflow.com/a/11456496/915441.