# cron ने कामं schedule करा

Source: https://ravindrabagale.com/mr/cyber/part-02/ch06-linux-advanced-commands/6-9-scheduling-tasks-cron.html
Language: mr (Marathi with English technical terms)

ठराविक वेळी किंवा interval ने command चालवण्यासाठी cron वापरतात. पाच fields चा क्रम आधी समजून घ्या:

 ┌──────── minute (0-59)
 │ ┌────── hour (0-23)
 │ │ ┌──── day of month (1-31)
 │ │ │ ┌── month (1-12)
 │ │ │ │ ┌ day of week (0-7, 0 and 7 = Sunday)
 │ │ │ │ │
 * * * * *  command

 | Schedule
 | अर्थ

 | */5 * * * *
 | दर 5 मिनिटांनी

 | 0 2 * * *
 | रोज 02:00 वाजता

 | 30 9 * * 1-5
 | सोमवार–शुक्रवार 09:30

 | 0 0 1 * *
 | प्रत्येक महिन्याच्या पहिल्या दिवशी मध्यरात्र

 | @reboot
 | Boot/cron startup वेळी

क्रम: minute, hour, day of month, month, day of week. */5 * * * * दर पाच मिनिटांनी; 0 2 * * * रोज 02:00; 30 9 * * 1-5 सोमवार–शुक्रवार 09:30; 0 0 1 * * दर महिन्याच्या पहिल्या दिवशी मध्यरात्र. @reboot cron च्या startup/boot संबंधित schedule साठी.

रोज 01:30 ला backup example

आधी mkdir -p ~/backups करा. मग crontab -e उघडून source मधली line जोडा:

30 1 * * * tar -czf $HOME/backups/site-$(date +\%F).tar.gz /var/www/html

Crontab मध्ये % ला विशेष अर्थ आहे, म्हणून date format मध्ये \% आहे. Job च्या user ला /var/www/html read आणि backup path write permissions लागतील.

Amazon Linux 2023

Cron installed नसेल तर source workflow: sudo yum install -y cronie, sudo service crond start, sudo systemctl enable crond. Systemd timers हा दुसरा पर्याय आहे. Schedule कोणत्या timezone मध्ये चालेल ते तपासा; lab ला India time हवा असेल तर sudo timedatectl set-timezone Asia/Kolkata वापरता येतो.

Security मध्ये cron

अनधिकृत scheduled job पुन्हा पुन्हा code चालवून persistence देऊ शकतो. Investigation मध्ये users चे crontabs, /etc/crontab आणि /etc/cron.d/ तपासतात. Root job ने चालणारी script world-writable असेल तर गंभीर permissions चूक आहे.

Practice

दर पाच मिनिटांनी date आणि uptime ~/uptime.log मध्ये लिहिणारा lab job तयार करा. 15 मिनिटांनी output तपासा आणि तो test job काढा.

रवींद्र बागले यांची tip

Terminal मध्ये चालणारा job cron मध्ये fail झाला तर PATH, working directory, user permissions आणि environment तपासा. पूर्ण paths वापरा, stdout/stderr log मध्ये द्या आणि command आधी manually तपासा.
