Есть скрипт для определения внешнего ip адреса и отправки его, при его изменении, на почту. Проблема в том, что при выполнении в cron скрипт выполняется, но письмо не отсылает. А если выполнить скрипт вручную, то письмо доходит. Странно все как это. Покажу наглядно.
Скрипт:
cat check_ip
#!/bin/bash
ip=`wget -q -O - http://formyip.com/ | awk '/The/{print $5}'`
ip2=`cat < /home/user/script/ip.txt`
if [ "$ip" != "$ip2" ]
then
echo "$ip" > /home/user/script/ip.txt
echo "From: [check_ip] <my**@gmail.com>" > /home/user/script/head_mail
echo "To: USER <conna**@mail.ru> " >> /home/user/script/head_mail
echo "Subject: [check_ip]: Назначен новый IP" >> /home/user/script/head_mail
echo "Привет, Григорий!" >> /home/user/script/head_mail
echo "Спешу сообщить Вам о изменении IP адреса домашнего компьютера." >> /home/user/script/head_mail
echo "" >> /home/user/script/head_mail
echo "$ip" >> /home/user/script/head_mail
echo "" >> /home/user/script/head_mail
echo "С Уважением," >> /home/user/script/head_mail
echo "Ваш верный скрипт, [check_ip]" >> /home/user/script/head_mail
cat /home/user/script/head_mail | sendmail conna**@mail.ru
fi
exit 0
Файлы которые там лежат и их права
ls -la /home/user/script/
-rwxr-xr-x. 1 user user 1021 янв 30 00:17 check_ip
-rw-r--r--. 1 user user 358 янв 30 00:29 head_mail
-rw-r--r--. 1 user user 14 янв 30 00:29 ip.txt
Если запустить вручную ./check_ip в терминале, то все работает и письмо на почту приходит. Идем далее, надо же автоматизировать процесс как то. Решил воспользоваться cron'ом. Добавил правило, каждый ровный час:
crontab -e
SHELL=/bin/bash
MAILTO=""
0 * * * * /home/user/script/check_ip
Настало время (условно) Проверяю время изменения файлов, и понимаю, что крон отработал
ls -la /home/user/script/
-rwxr-xr-x. 1 user user 1021 янв 30 00:17 check_ip
-rw-r--r--. 1 user user 358 янв 30 01:00[/b] head_mail
-rw-r--r--. 1 user user 14 янв 30 01:00 ip.txt
Но письмо на почту не пришло. Иду в логи и гляжу что там:
cat /var/log/maillog (Этот кусок лога при запуске скрипта вручную, письмо дошло)
Jan 30 00:29:39 server sendmail[3321]: v0TMTdHP003321: from=user, size=358, class=0, nrcpts=1, msgid=<201701292229.v0TMTdHP003321@server.lan>, relay=root@localhost
Jan 30 00:29:39 server sendmail[3322]: STARTTLS=server, relay=localhost [127.0.0.1], version=TLSv1/SSLv3, verify=NO, cipher=DHE-DSS-AES256-GCM-SHA384, bits=256/256
Jan 30 00:29:39 server sendmail[3321]: STARTTLS=client, relay=[127.0.0.1], field=cn_subject, status=failed to extract CN
Jan 30 00:29:39 server sendmail[3321]: STARTTLS=client, relay=[127.0.0.1], field=cn_issuer, status=failed to extract CN
Jan 30 00:29:39 server sendmail[3321]: STARTTLS=client, relay=[127.0.0.1], version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-DSS-AES256-GCM-SHA384, bits=256/256
Jan 30 00:29:39 server sendmail[3322]: v0TMTdAV003322: from=<user@server.lan>, size=597, class=0, nrcpts=1, msgid=<201701292229.v0TMTdHP003321@server.lan>, proto=ESMTP, daemon=MTA, relay=localhost [127.0.0.1]
Jan 30 00:29:39 server sendmail[3321]: v0TMTdHP003321: to=conna**@mail.ru, ctladdr=user (1000/1000), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30358, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (v0TMTdAV003322 Message accepted for delivery)
Jan 30 00:29:40 server sendmail[3324]: STARTTLS=client, relay=gmail-smtp-msa.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=ECDHE-RSA-AES128-GCM-SHA256, bits=128/128
Jan 30 00:29:41 server sendmail[3324]: v0TMTdAV003322: to=<conna**@mail.ru>, ctladdr=<user@server.lan> (1000/1000), delay=00:00:02, xdelay=00:00:02, mailer=relay, pri=120597, relay=gmail-smtp-msa.l.google.com. [64.233.165.109], dsn=2.0.0, stat=Sent (OK 1485728981 18sm3218594ljh.39 - gsmtp)
(А этот кусок кода после работы cron, письмо не пришло)
Jan 30 01:00:05 server sendmail[3286]: v0TMR5AH003286: from=user, size=563, class=-60, nrcpts=1, msgid=<201701292227.v0TMR5AH003286@server.lan>, relay=user@localhost
Jan 30 01:00:05 server sendmail[3287]: STARTTLS=server, relay=localhost [127.0.0.1], version=TLSv1/SSLv3, verify=NO, cipher=DHE-DSS-AES256-GCM-SHA384, bits=256/256
Jan 30 01:00:05 server sendmail[3286]: STARTTLS=client, relay=[127.0.0.1], field=cn_subject, status=failed to extract CN
Jan 30 01:00:05 server sendmail[3286]: STARTTLS=client, relay=[127.0.0.1], field=cn_issuer, status=failed to extract CN
Jan 30 01:00:05 server sendmail[3286]: STARTTLS=client, relay=[127.0.0.1], version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-DSS-AES256-GCM-SHA384, bits=256/256
Jan 30 01:00:05 server sendmail[3287]: v0TMR5D4003287: from=<user@server.lan>, size=801, class=-60, nrcpts=1, msgid=<201701292227.v0TMR5AH003286@server.lan>, proto=ESMTP, daemon=MTA, relay=localhost [127.0.0.1]
Jan 30 01:00:05 server sendmail[3286]: v0TMR5AH003286: to=root, ctladdr=user (1000/1000), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=138563, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (v0TMR5D4003287 Message accepted for delivery)
Jan 30 01:00:05 server sendmail[3288]: v0TMR5D4003287: to=<root@server.lan>, ctladdr=<user@server.lan> (1000/1000), delay=00:00:00, xdelay=00:00:00, mailer=local, pri=139040, dsn=2.0.0, stat=Sent
Помогите пожалуйста разобраться. Чувствую, что где то рядом гуляю но пока не осенило
Пользователь добавил сообщение 30 Января 2017, 15:08:35:
Решил проблему.
Заключалась она в том, что в cron использовалась переменная PATH с отличным от такой же переменной в файле скрипта.
Я сравнил выхлоп команды env > chek-ip и в кроне указал env > /путь/asd с помощью diff -u chek_ip asd и переменную path рабочего скрипта прописал в крон.