Действительно ли возможно обнаружить, когда файл был загружен?

У меня была та же проблема. Мой вентилятор работал с остервенением все время. Я попробовал всем в Linux ни кроме чего, произошел. Таким образом, мое заключение состояло в том, что моя вторая видеокарта перегревает и заставляет вентилятор работать все время. У меня есть две видеокарты, Intel HD и nVidia 635. Я пытался удалить Nvidia из системы, но она загружалась каждый раз снова и снова с ним на. Поскольку поместить драйверы Nvidia, был действительно f.u., и Linux просто пришел в бешенство, таким образом, я ввел BIOS и выключил Nvidia, и просто позвольте карте Intel работать, и теперь это хорошо. Я не могу сделать только работу Nvidia из BIOS (возможно, если я обновляю его). Таким образом, Linux использует Intel, и для Windows 7 I включают обе карты, таким образом, я могу использовать Nvidia для некоторых приложений, в которых я нуждаюсь.

7
04.12.2014, 01:04
3 ответа

Есть 3 способа, которые я могу себе представить, и которые могут дать Вам решение.

1. Пользовательская sftp подсистема

Вы можете обернуть демон sftp-сервера с помощью sshd_config и "переопределить" его своим собственным скриптом, который затем может перехватить то, что делает sftp-сервер, а затем действовать, когда вы видите, что файл был загружен. Переопределить стандартный sftp-сервер в sshd_config очень просто:

Subsystem       sftp    /usr/local/bin/sftp-server

Выяснить, что делать в оберточном скрипте, было бы непросто. В /usr/local/bin/sftp-сервере:

#!/bin/sh

# ...do something...
chroot /my/secret/stuff /usr/libexec/openssh/sftp-server
# ...do something...

2. Посмотрите лог-файлы

Если вы включите отладку sftp-sever, то сможете заставить его показывать лог-файлы, когда файлы открываются/закрываются и читаются/записываются на/с SFTP-сервера. Вы можете написать демон/скрипт, который просматривает эти логи, а затем при необходимости делает резервную копию файла. Более подробная информация о том, как этого добиться, уже частично освещена в моем ответе на эту плитку вопросов и ответов: Уровень протоколирования активности в SFTP , а также здесь, в этой записи блога под заголовком: Регистрация активности сеанса передачи файла SFTP .

Журналы SFTP могут быть улучшены, поэтому они выглядят следующим образом:

Sep 16 16:07:19 localhost sftpd-wrapper[4471]: user sftp1 session start from 172.16.221.1
Sep 16 16:07:19 localhost sftp-server[4472]: session opened for local user sftp1 from [172.16.221.1]
Sep 16 16:07:40 localhost sftp-server[4472]: opendir "/home/sftp1"
Sep 16 16:07:40 localhost sftp-server[4472]: closedir "/home/sftp1"
Sep 16 16:07:46 localhost sftp-server[4472]: open "/home/sftp1/transactions.xml" flags WRITE,CREATE,TRUNCATE mode 0644
Sep 16 16:07:51 localhost sftp-server[4472]: close "/home/sftp1/transactions.xml" bytes read 0 written 192062308
Sep 16 16:07:54 localhost sftp-server[4472]: session closed for local user sftp1 from [172.16.221.1]

Вам нужно будет разработать демон/сценарий, который будет отслеживать журналы для пар открытых/закрытых событий. Они представляют собой завершенную передачу файлов. Вы также можете использовать syslog, который мог бы отслеживать события журнала "CLOSE" и использоваться для копирования передаваемых файлов.

3. Incron

Вы можете использовать Inotify события, которые ядро Linux производит каждый раз при обращении к файлу. Существует служба Incron, которая работает аналогично Cron. Там, где Cron работает на основе времени, Incron работает на основе событий файла. Таким образом, вы можете настроить запись Incron, которая будет следить за каталогами загрузки SFTP, и каждый раз, когда обнаруживается определенное событие в файле, скопировать файл.

Посмотрите на страницу inotify man page для описания различных событий. Думаю, вы захотите просмотреть read() (IN_ACCESS), за которым следует close() (IN_CLOSE_WRITE). Это будет для файлов, которые были скопированы с SFTP-сервера.

Incron правила выглядят следующим образом:

<directory> <file change mask> <command or action>  options
/var/www/html IN_CREATE /root/scripts/backup.sh
/sales IN_DELETE /root/scripts/sync.sh
/var/named/chroot/var/master IN_CREATE,IN_ATTRIB,IN_MODIFY /sbin/rndc reload

Эта статья под заголовком: Linux incrond inotify: Monitor Directories For Changes And Take Action показывает гораздо больше деталей, если вы хотите попробовать использовать эту опцию.

12
27.01.2020, 20:16

Файл ~/.bashrc не всегда читается: см. Bash Startup Files в руководстве.

Вызывает ли ваш профиль ~/.bash (или ~/.profile) файл .bashrc? Часто это появляется в файлах .profile:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi
-121--157723-

Я не уверен, какой дистрибутив вы используете, но очень часто сценарии cron будут выполняться с минимальной оболочкой с меньшей «привлекательностью», чем интерактивная оболочка. Это весь твой сценарий? Если это так, необходимо добавить shebang , чтобы загрузить соответствующий контекст.

Также это помогает использовать полный путь для вещей, отличных от команд builtin shell. Например, find может находиться по адресу /usr/bin/find . Вы можете использовать команду , которая , чтобы разрешить эти проблемы:

[me@host ~]$ which find
/usr/bin/find

В конечном счете, как предложил D.Ghoti, вы должны записать выходные данные вашего скрипта cron где-нибудь (захват stdout и stderr). Например,

  0 23 * * * /home/user/backup_script.sh >> /var/log/backup.log 2>&1
-121--244661-

Если вы знаете путь и имя, вы можете сделать это

if [ -f $filename ];
then 
archive
else
echo ""
fi

Однако вы не добавили такую информацию.

-1
27.01.2020, 20:16

Настройте SSH-сервер на ведение журнала активности, после чего вы можете разобрать журнал, чтобы узнать, был ли загружен такой файл.

Чтобы включить приложение протоколирования -l INFO в строке подсистемы sftp в файле /etc/ssh/sshd_config, оно должно выглядеть так (путь может меняться в зависимости от дистрибутива, я использую SuSE 11):

Subsystem    sftp    /usr/lib64/ssh/sftp-server -l INFO

Теперь sftp сессии будут протоколироваться в файле /var/log/messages.

Это журнал для файла, загруженного sftp:

Dec  3 08:42:02 $HOSTNAME sftp-server[$PID]: session opened for local user user from [192.168.0.10]
Dec  3 08:42:03 $HOSTNAME sftp-server[$PID]: opendir "/home/user"
Dec  3 08:42:03 $HOSTNAME sftp-server[$PID]: closedir "/home/user"
Dec  3 08:42:18 $HOSTNAME sftp-server[$PID]: open "/home/user/file" flags READ mode 0666
Dec  3 08:42:19 $HOSTNAME sftp-server[$PID]: close "/home/user/file" bytes read 48843 written 0

Теперь вы можете разобрать файл, чтобы узнать, был ли доступ к этому файлу с помощью чего-то вроде:

#!/bin/bash

grep sftp /var/log/messages | grep -q $FILENAME
if [ $? -eq 0 ]
    do something
else
    do other thing
fi

Как включить протоколирование SFTP: https://serverfault.com/questions/73319/sftp-logging-is-there-a-way

3
27.01.2020, 20:16

Теги

Похожие вопросы