Если вы работаете в Linux (я предполагаю, что Systemd здесь), вы можете написать сервис, который выполняет код при запуске / завершении работы.Этот код записывает текущую метку времени в файл CSV вместе с индикатором «запуск» или «выключение».
Вот скрипт Python3, который в качестве первого аргумента принимает тип метки времени для входа в систему «updownlog.txt»":
import os
import sys
import time
def main():
logfile = "updownlog.csv"
write_header = False
if len(sys.argv) != 2:
sys.exit("Error: script takes exactly one argument")
if sys.argv[1] != "shutdown" and sys.argv[1] != "startup":
sys.exit("Error: First argument should be 'startup' or 'shutdown'")
typ = sys.argv[1]
if not os.path.exists(logfile):
write_header = True
with open("updownlog.csv", "a") as f:
now = time.time()
if write_header:
f.write("type,timestamp\n")
f.write("{},{}\n".format(typ, now))
if __name__ == "__main__":
main()
Далее вам нужно будет создать системную службу, запускающую этот скрипт.Я беззастенчиво копирую решение, предлагаемое в этом ответе на UnixSX : все заслуги перед "Джоном 9631"!Если вы все еще используете систему, основанную на init.d, в этом потоке тоже есть отличные ответы.
Итак, создайте служебный файл для вашей регистрации:
vim /etc/systemd/system/log_start_stop.service
и скопируйте в файлcontent:
[Unit]
Description=Log startup and shutdown times
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart="/home/Sungod3k/log.py startup"
ExecStop="/home/Sungod3k/log.py shutdown"
[Install]
WantedBy=multi-user.target
Затем включите службу с помощью команды:
systemctl enable log_start_stop
Конечно, это еще не скажет вам, есть ли у вас дефицит сна, поэтому вам понадобитсявыполнить некоторую постобработку, например, с Python или R, или даже awk
.