I'm trying to make a Bash-script which checks if I've downloaded anything, and if I have it should scan that. I'm making it launch at startup using crontab, however that part doesn't work.

This is my code:


inotifywait ~/Downloads -m -r -e modify -e moved_to --format '%w%f' | while read file
    $(clamscan --bell --recursive --max-filesize=99999 --log log/myLogs.txt $file)

    if [ $CLAMSCAN -eq 1 ]; then
        $(xmessage -buttons Ok:0,"Remove":1,"View Logs":2 -default Ok -center "Infected file: $file is found...")

        if [ $CHOICE -eq 1 ]; then
            $(rm -r $file)
        elif [ $CHOICE -eq 2 ]; then
            $(xmessage -buttons Ok:0 -default Ok -center -file log/myLogs.txt)

My crontab:

# Edit this file to introduce tasks to be run by cron.
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# For more information see the manual pages of crontab(5) and cron(8)
# m h  dom mon dow   command
@reboot sh $HOME/.custom_security/Downloads_sec.sh

When I change directory to e.g '/', and then run sh $HOME/.custom_security/Downloads_sec.sh I get this error:

    Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
ERROR: Can't open log/myLogs.txt in append mode (check permissions!).
ERROR: Problem with internal logger.

The script works fine as standalone script!


The problem is with this line:

clamscan --bell --recursive --max-filesize=99999 --log log/myLogs.txt $file

This tries to write to log/myLogs.txt. If you are in your home directory /home/oneill, it will try to write to /home/oneill/log/myLogs.txt, which is probably the correct place. If you are in the root / directory, it will try to write to /log/myLogs.txt, which it does not have the proper permissions for.

Either use absolute paths, or put a cd /home/oneill somewhere in the beginning of the script.

  • The script is now indeed executed! However, xmessage does still not work. How to fix that?
    – O'Niel
    Jan 21 '17 at 17:30
  • I added DISPLAY=':0' in crontab -e and the script, changed xmessage to /usr/bin/X11/xmessage, and added the -display $DISPLAY argument to xmessage, and everything works PERFECTLY! Thanks!
    – O'Niel
    Jan 21 '17 at 19:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.