Батарея CMOS моего настольного компьютера не работает, поэтому мне приходится устанавливать время и дату каждый раз при запуске компьютера. Я хочу создать скрипт оболочки для автоматизации установки даты и времени на моем компьютере после завершения каждой загрузки. Возможные варианты: 1. покупка батареи CMOS :- я рассматриваю это, но пока что скрипт оболочки подойдет. 2. использование NTP для синхронизации времени и даты с интернет-серверами :- я не подключен к интернету.
решение1
Если система не может узнать время, единственное, что вы можете сделать, это попытаться сохранить дату и время при выключении и перезагрузить при перезагрузке (как вы и предлагали).
Предупреждение: Следующая инструкция должна работать с системой инициализации типа SystemV: Я ее не тестировал (сейчас я на машине с Windows), поэтому вам придется протестировать ее и отнестись к ней с долей скепсиса --- могут быть опечатки.
Предупреждение2я думаю чтовыскочка(современная реализация сценариев инициализации в Ubuntu) уважает это, но ваш опыт может отличаться: необходимы тесты и эксперименты. Вы можете начать сздесьесли вы хотите сделать это более изящным способом.
Чтобы сохранить дату при выключении/перезагрузке, вы можете добавить скрипт в каталог /etc/rc0.d
и /etc/rc6.d
(первый используется для выключения, а второй — для перезагрузки). Обычный способ сделать это — создать скрипт в /etc/init.d
и затем связать его оттуда.
Все следующие команды должны быть выполнены как root. Используйте предпочитаемый вами метод...
Итак, вы можете создать сценарий /etc/init.d/savedatetime
с помощью вашего любимого редактора и его содержимого:
#!/bin/sh
date +%m%d%H%M%Y.%S > /root/lastseendate.txt
сделайте его исполняемым, а затем скомпонуйте его ( date
формат — тот, который дата может прочитать, см. man date
).
chmod +x /etc/init.d/savedatetime
cd /etc/rc0.d/
ln -s ../init.d/savedatetime K99savedatetime
cd /etc/rc6.d/
ln -s ../init.d/savedatetime K99savedatetime
Этот K99
скрипт должен быть последним, выполняемым перед выключением или перезагрузкой. Если часы поддерживаются при перезагрузке, и вы хотите сделать это только при выключении, просто пропустите последние две команды.
Затем при перезагрузке вы хотите прочитать файл. Есть много мест, куда его можно поместить, самое простое - /etc/rc.local
.
Отредактируйте его и поместите в начало:
[ -f /root/lastseendate.txt ] && date $(cat /root/lastseendate.txt)
rm -f /root/lastseendate.txt
...и это должно быть все. Удачного взлома!