Per Stenebo
2012-06-29 22:10:29
2019-11-10 21:08:11
Cron
Schemalägg exekvering av kommandon och körning av filer med cron.
| Wikipedia (en) | corntab | help.ubuntu.com |
minute (0-59), hour (0-23, 0 = midnight), day (1-31), month (1-12), weekday (0-6, 0 = Sunday), command
01 04 1 1 * /usr/bin/somedirectory/somecommand
Var filer och kataloger ligger beror till viss del på vilken distribution som används, här är exempel från ubuntu:
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
crontab log
| Ask Ubuntu |
On Ubuntu a default installation the cron jobs get logged to
/var/log/syslog
You can see just cron jobs in that logfile by running
grep -i cron /var/log/syslog
cron mail
Texten nedan förutsätter att du redan kan skicka mejl från tex kommandoraden, alltså att du har en fungerande MTA (mail transfer agent), i exemplen nedan används sSMTP som MTA.
Avsändare
När cron skickar epost sätts headern From: root (Cron Daemon), det är varken praktiskt eller populärt bland epostprogram/tjänster.
Enda sättet jag har hittat för att lösa problemet är att ersätta strängen "From: root (Cron Daemon)" med den önskade avsändaren, tex "From: cron.minserver@example.se" när mejlet skickas.
#!/bin/bash sed -e "s/From: root (Cron Daemon)/From: cron.minserver@example.se/" | /usr/sbin/ssmtp $BASH_ARGV
eller
#!/bin/bash sed -e "\ s/From: root (Cron Daemon)/From: cron hemma /;\ s/From: Anacron /From: cron hemma /\ " | ssmtp $BASH_ARGV
Lägg koden i ett skript och anpassa till dina förhållanden; ersätt "cron.minserver@example.se" med din avsändare och "/usr/sbin/ssmtp" med sökvägen till din MTA.
Gör skriptet exekverbart: sudo chmod +x /sökväg/till/skript.sh
Kolla din nuvarande sendmail:
ls -l /usr/sbin | grep sendmail
Jag hade:
lrwxrwxrwx 1 root root 5 jul 1 2012 sendmail -> ssmtp
Radera befitlig symlänk:
sudo rm /usr/sbin/sendmail
Ersätt (symlänken till) sendmail med en symlänk till skriptet:
sudo ln -s /sökväg/till/skript.sh /usr/sbin/sendmail
Detta är testat på Ubuntu 14.04 med MTA msmtp och ssmtp. Skriptet är hämtat från serverfault.com
Fel
Om det inte fungerar att skicka mejl efter ändringen, felsök i loggfilen:
tail /var/log/syslog
Om du har en rad som liknar denna har mejlfunktionen råkat på ett fatalt fel:
Aug 10 18:14:01 server12 CRON[16775]: (root) MAIL (mailed 1 byte of output; but got status 0x007f, #012)
Kontrollera sökvägen till din MTA och uppdatera skriptet: which ssmtp
Mottagare
Du kan styra till vem cron skall skicka mejlen till genom att lägga in texten
MAILTO=mej@example.se
i den aktuella cronfilen. Man skulle kunna tro att det skulle räcka att lägga in raden i /etc/crontab, men mina tester visar att inställningen inte ärvs till andra cron-filer, tex /etc/cron.d/rsnapshot.
Teckenkodning
Om speciella tecken, tex åäö, inte visas på rätt sätt kan du ändra teckenkodningen på samma sätt som mottagare ovan:
MAILTO=mej@example.se CONTENT_TYPE="text/plain; charset=utf-8" CONTENT_TRANSFER_ENCODING=utf-8