Bảo Ngô SoT
Búa Gỗ
Cron và Crontab
Crontab là tập tin có cấu trúc chứa thông tin lịch trình cần được thực thi. Mỗi người dùng (nếu có nhu cầu) đều có một và chỉ một tập tin crontab cho riêng mình. Tên của tập tin này trùng với tên người dùng sở hữu nó và những câu lệnh bên trong được thực thi theo những permission mà người dùng đó được cấp. Ví dụ tôi có một tài khoản người dùng tên là u0_231 và chỉ được cấp quyền xem, sửa, xóa nội dung thư mục /sdcard/foo/ thì tập tin crontab của tôi cũng sẽ có tên u0_231 và mọi câu lệnh trong lịch trình chỉ được phép gói gọn trong phạm vi thư mục /sdcard/foo/.
Cấu trúc của Crontab
Mỗi dòng của crontab có dạng như sau:
Trong đó:
Diễn giải bằng lời:
Một số ví dụ khác:
Thực thi 2 lệnh /system/bin/ping -c 192.168.0.1; ls -la >>/data/local/tmp/list.log vào 00:00 và 12:00 ngày 1 mỗi ba tháng một lần.
Xóa thư mục /sdcard/.temp vào lúc 23:37 các ngày từ 15 đến 21 VÀ các ngày thứ 2 hàng tuần.
Cron trên Android
Để sử dụng cron trên Android, yêu cầu thiết bị của bạn đã được root, cài đặt một phiên bản ổn định của busybox và một ứng dụng Terminal.
Đầu tiên, mở ứng dụng Terminal lên và thực thi câu lệnh này:
Tiếp theo, thiết lập cho cron service tự khởi động:
Khởi động lại thiết bị để áp dụng. Nếu thành công, thiết bị của bạn sẽ tự khởi động lại mỗi phút một lần.
Để bổ sung thêm một lịch trình, bạn chỉ cần thực thi câu lệnh:
Câu lệnh này giúp chèn thêm nội dung vào tập tin /system/etc/crontab/root.
Để xóa một lịch trình, hãy xóa dòng nội dung tương ứng trong crontab.
Một ví dụ nhỏ
Lịch trình sau đây sẽ làm thiết bị tắt nguồn lúc 02:00 mỗi ngày; đồng thời xóa bộ nhớ cache của tất cả các ứng dụng mỗi 10 ngày một lần vào lúc 01:30:
Chú thích:
Cron là một Daemon service có nhiệm vụ thực thi lịch trình của các người dùng. Đây là một khái niệm khá quen thuộc đối với người dùng Linux. Cron đọc tập tin crontab có chứa thông tin lịch biểu và load vào bộ nhớ. Cứ mỗi phút, cron kiểm tra xem có lệnh nào cần được thực thi (hoặc có crontab nào bị thay đổi hay không). Nếu có, tiến hành thực thi câu lệnh (hoặc load lại crontab).Crontab là tập tin có cấu trúc chứa thông tin lịch trình cần được thực thi. Mỗi người dùng (nếu có nhu cầu) đều có một và chỉ một tập tin crontab cho riêng mình. Tên của tập tin này trùng với tên người dùng sở hữu nó và những câu lệnh bên trong được thực thi theo những permission mà người dùng đó được cấp. Ví dụ tôi có một tài khoản người dùng tên là u0_231 và chỉ được cấp quyền xem, sửa, xóa nội dung thư mục /sdcard/foo/ thì tập tin crontab của tôi cũng sẽ có tên u0_231 và mọi câu lệnh trong lịch trình chỉ được phép gói gọn trong phạm vi thư mục /sdcard/foo/.
Cấu trúc của Crontab
Mỗi dòng của crontab có dạng như sau:
Mã:
0 2 12 * * /system/bin/find /sdcard -iname '*.mp4' >> /sdcard/list.txt
0: phút thứ 0
2: 2 giờ (am)
12: ngày 12
*: tất cả các tháng trong năm
*: tất cả các ngày trong tuần
/system/bin/find /sdcard -iname '*.mp4' >> /sdcard/list.txt: câu lệnh cần thực thi
2: 2 giờ (am)
12: ngày 12
*: tất cả các tháng trong năm
*: tất cả các ngày trong tuần
/system/bin/find /sdcard -iname '*.mp4' >> /sdcard/list.txt: câu lệnh cần thực thi
Thực thi câu lệnh /system/bin/find /sdcard -iname '*.mp4' >> /sdcard/list.txt vào lúc 02:00 am vào tất cả các ngày 12 mỗi tháng.
Mã:
0 0,12 1 */3 * /system/bin/ping -c 192.168.0.1; ls -la >>/data/local/tmp/list.log
Mã:
37 23 15-21 * 1 /system/bin/rm -rf /sdcard/.temp
Cron trên Android
Để sử dụng cron trên Android, yêu cầu thiết bị của bạn đã được root, cài đặt một phiên bản ổn định của busybox và một ứng dụng Terminal.
Đầu tiên, mở ứng dụng Terminal lên và thực thi câu lệnh này:
Mã:
su
->Lấy quyền root
echo '* * * * * /system/bin/reboot >/dev/null 2>&1' >> /system/etc/crontab/root
->Ghi lịch trình vào /system/etc/crontab/root.
Lưu ý thay thế '* * * * * /system/bin/reboot >/dev/null 2>&1' theo ý của bạn.
chmod +x /system/etc/crontab/root
->Cấp quyền thực thi cho /system/etc/crontab/root
Mã:
su
echo 'crond -b -c /system/etc/crontab' >> /system/etc/install-recovery.sh
Để bổ sung thêm một lịch trình, bạn chỉ cần thực thi câu lệnh:
Mã:
su
echo '* * * * * command' >> /system/etc/crontab/root
->Thay thế '* * * * * command' theo ý của bạn
Câu lệnh này giúp chèn thêm nội dung vào tập tin /system/etc/crontab/root.
Để xóa một lịch trình, hãy xóa dòng nội dung tương ứng trong crontab.
Một ví dụ nhỏ
Lịch trình sau đây sẽ làm thiết bị tắt nguồn lúc 02:00 mỗi ngày; đồng thời xóa bộ nhớ cache của tất cả các ứng dụng mỗi 10 ngày một lần vào lúc 01:30:
Mã:
su
echo '0 2 * * * /system/bin/am start -a android.intent.action.ACTION_REQUEST_SHUTDOWN --ez KEY_CONFIRM true --activity-clear-task' >>/system/etc/crontab/root
echo '30 1 */10 * * /system/xbin/find /data/data -path */cache/* -exec /system/bin rm -rf {} +' >>/system/etc/crontab/root
Chú thích:
- Daemon: Thuật ngữ chỉ dịch vụ chạy nền của Linux-based OS.
- busybox: Tập hợp các tiện ích được biên dịch thành một file duy nhất, có thể cài đặt bằng ứng dụng "Busybox Pro"
- Cũng giống như shell script, crontab chấp nhận range và list (ví dụ "1,2,5,9", "0-4,8-12"). Nó cũng bỏ qua dòng lệnh bắt đầu bằng ký tự # (ký tự comment).
- Bạn nên tìm hiểu thêm về các lệnh shell để tùy chỉnh lịch trình một cách có hiệu quả.
Sửa lần cuối: