Как заставить мой скрипт bash создать файл журнала для clamscan, выполняющегося в cron?

Я создал пользовательский clamscan ( clamav ) в bash, и когда я запускаю его в своей оболочке, все в порядке, но если я запустил его в cron , он не сможет создать файл журнала.

Это ошибки:

  1. / root / Scripts / clamscan: строка 9: /var/log/clamscan/weekly/clamscan-Test-2014-09-16.log: нет такого файла или каталога
  2. / bin / bash: / root / Сценарии / clamscan: разрешение отклонено
  3. Также я получаю письма от cron: Null message body, надеюсь, что все в порядке
  4. Перед «если это нормально почта» я получаю пустое электронное письмо без сообщения

Если я запускаю скрипт в оболочке, он создает файл журнала без проблем.

Вопросов:

  1. Что мне нужно сделать с моим bash script чтобы он мог писать соответствующие файлы?
  2. Почему я получаю эти ошибки?

Вот сценарий:

 #!/bin/bash FILENAMEDATE=$(date +"%F") /usr/bin/clamscan -i -r --log=/var/log/clamscan/weekly/clamscan-Test-$FILENAMEDATE.log /home/Username/Downloads >/dev/null 2>/dev/null if [ $? -gt 0 ]; then SUBJECT="Virus Report for `uname -n`, `date +%m-%d-%Y`" mail -s "$SUBJECT" 'Email' < /var/log/clamscan/weekly/clamscan-Test-$FILENAMEDATE.log fi 

Здесь / etc / crontab:

 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO="Email" # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 56 13 * * * root /bin/bash /root/Scripts/clamscan 

2 Solutions collect form web for “Как заставить мой скрипт bash создать файл журнала для clamscan, выполняющегося в cron?”

Кажется, что ваш clamscan не генерировал никакого файла журнала на выходе. Просто измените clamscan blah blah >/dev/null 2>/dev/null на clamscan blah blah &>/tmp/scan.log и проверьте scan.log – возможно, есть некоторые подсказки.

Я нашел ответ:

Обратите внимание, что эта система Fedora 20.

SELinux отказал clamscan от написания, создания и больше для системы.

Поэтому следуйте инструкциям в инструменте устранения неполадок SELinux, позволяя clamscan получить доступ и повторить для всех обращений. Также было отказано в mailx, но это не показало ничего видимого для процесса, оно работает!

Вот два из отрицаний SELinux:

 SELinux is preventing /usr/bin/mailx from ioctl access on the file . ***** Plugin catchall (100. confidence) suggests ************************** If you believe that mailx should be allowed ioctl access on the file by default. Then you should report this as a bug. You can generate a local policy module to allow this access. Do allow this access for now by executing: # grep mail /var/log/audit/audit.log | audit2allow -M mypol # semodule -i mypol.pp Additional Information: Source Context system_u:system_r:system_mail_t:s0-s0:c0.c1023 Target Context system_u:object_r:user_home_t:s0 Target Objects [ file ] Source mail Source Path /usr/bin/mailx Port <Unknown> Host Hostname Source RPM Packages mailx-12.5-10.fc20.x86_64 Target RPM Packages Policy RPM selinux-policy-3.12.1-183.fc20.noarch Selinux Enabled True Policy Type targeted Enforcing Mode Enforcing Host Name Hostname Platform Linux Hostname 3.16.2-200.fc20.x86_64 #1 SMP Mon Sep 8 11:54:45 UTC 2014 x86_64 x86_64 Alert Count 1 First Seen 2014-09-16 17:42:37 GMT Last Seen 2014-09-16 17:42:37 GMT Local ID abc31a8e-345d-4d49-adf4-42cefab652a0 Raw Audit Messages type=AVC msg=audit(1410889357.123:13483): avc: denied { ioctl } for pid=32125 comm="mail" path="PathToLogFile.log" dev="dm-3" ino=2760739 scontext=system_u:system_r:system_mail_t:s0-s0:c0.c1023 tcontext=system_u:object_r:user_home_t:s0 tclass=file permissive=0 type=SYSCALL msg=audit(1410889357.123:13483): arch=x86_64 syscall=ioctl success=no exit=EACCES a0=0 a1=5401 a2=7fff29623700 a3=8 items=0 ppid=32089 pid=32125 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=765 comm=mail exe=/usr/bin/mailx subj=system_u:system_r:system_mail_t:s0-s0:c0.c1023 key=(null) Hash: mail,system_mail_t,user_home_t,file,ioctl 

 SELinux is preventing /usr/bin/clamscan from unlink access on the file . ***** Plugin catchall (100. confidence) suggests ************************** If you believe that clamscan should be allowed unlink access on the file by default. Then you should report this as a bug. You can generate a local policy module to allow this access. Do allow this access for now by executing: # grep clamscan /var/log/audit/audit.log | audit2allow -M mypol # semodule -i mypol.pp Additional Information: Source Context system_u:system_r:antivirus_t:s0-s0:c0.c1023 Target Context unconfined_u:object_r:user_home_t:s0 Target Objects [ file ] Source clamscan Source Path /usr/bin/clamscan Port <Unknown> Host Hostname Source RPM Packages clamav-0.98.4-1.fc20.x86_64 Target RPM Packages Policy RPM selinux-policy-3.12.1-183.fc20.noarch Selinux Enabled True Policy Type targeted Enforcing Mode Enforcing Host Name Hostname Platform Linux Hostname 3.16.2-200.fc20.x86_64 #1 SMP Mon Sep 8 11:54:45 UTC 2014 x86_64 x86_64 Alert Count 1 First Seen 2014-09-16 18:28:11 GMT Last Seen 2014-09-16 18:28:11 GMT Local ID 513c5c73-1ca8-4715-8b6a-458010ede5bf Raw Audit Messages type=AVC msg=audit(1410892091.713:13684): avc: denied { unlink } for pid=1305 comm="clamscan" name="eicar.com.txt" dev="dm-4" ino=10769 scontext=system_u:system_r:antivirus_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0 type=SYSCALL msg=audit(1410892091.713:13684): arch=x86_64 syscall=unlink success=no exit=EACCES a0=21fecf0 a1=3aa5db9a10 a2=0 a3=3a7478742e6d6f63 items=0 ppid=1302 pid=1305 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=792 comm=clamscan exe=/usr/bin/clamscan subj=system_u:system_r:antivirus_t:s0-s0:c0.c1023 key=(null) Hash: clamscan,antivirus_t,user_home_t,file,unlink 
  • команда telnet с пользовательской продолжительностью тайм-аута
  • Быстрый способ найти USB-идентификатор на основе USB-пути
  • xargs - добавить каждый аргумент с параметром
  • Назначение глобальных и локальных переменных
  • Поиск текстового файла по столбцу
  • Возврат переменной из функции
  • Использование таймаута в скрипте с одной командой, но несколько хостов
  • Ошибка Exec vs source на ==
  • Как использовать переменную для строки кода скрипта?
  • Как передать логику в скрипте и поддерживать читаемость?
  • Извлечь поля строки в переменные оболочки
  • Linux и Unix - лучшая ОС в мире.