2013-05-25 37 views
16

tôi không thể tìm thấy câu trả lời cho câu hỏi của tôi: Có thể chạy crontab phải khởi động lại Android sử dụng busybox (hoặc các phương tiện khác)Làm thế nào để sử dụng crontab trong Android?

Cố gắng chạy crontab, và nó phàn nàn về chưa biết uid 0.

thử để chạy khởi động lại và không có gì.

Hoặc tôi đang yêu cầu điều không thể ngay bây giờ?

+0

http://stackoverflow.com/questions/13063106/how-to-install-busybox-on-android-emulator-android-2-3-3 – Sam

Trả lời

19

Yêu cầu

  1. truy cập Root: cho commads superuser như khởi động lại, hoặc cấu hình init.d. Crond vẫn có thể chạy dưới quyền riêng tư của người dùng thông thường.

  2. Busybox: cho 'crond' dịch vụ

  3. (Tùy chọn) hỗ trợ init.d: ​​để bắt đầu dịch vụ 'crond' lúc khởi động

Tạo cronjob

Tạo tập tin cronjob trong thư mục/dữ liệu/crontab/(nó có thể là bất kỳ thư mục có thể truy cập nào ngay cả trong sdcard) với tên tệp 'root'. Viết cronjob của bạn bên trong tệp 'root'.

echo '

53 * * * * reboot' >>/data/crontab/root

thử nghiệm mà không cần khởi động lại

Bây giờ mở bất kỳ mô phỏng thiết bị trong thiết bị và chạy các lệnh sau ..

su -

crond -b -c/data/crontab

Bây giờ dịch vụ crond sẽ bắt đầu, để kiểm tra loại ...

pgrep -l crond Hoặc, ps | grep crond

Bắt đầu crond lúc khởi động

tạo ra một tập tin tại /system/etc/init.d với sự cho phép thực thi:

echo '

-b crond - c/data/crontab '> /system/etc/init.d/crond

chmod + x/system/etc/init.d/crond

Ví dụ cronjobs

53 * * * * reboot

sẽ khởi động lại thiết bị của bạn vào phút thứ 53 của mỗi giờ.

Lưu ý: 1. Nếu bạn sửa đổi crontab, hãy nhớ khởi động lại crond daemon sau khi tiêu diệt thẻ hiện có.

  1. Đôi khi, crond không thể chuyển tiếp trên múi giờ Android, nó có thể sử dụng UTC thay thế.
+0

Trong phần 'Bắt đầu lệnh crond at boot' không được là' crond -b -c/data/crond' nhưng 'crond -b -c/data/cronjob' – zen

0

nếu bạn nhận được lỗi "chỉ đọc hệ thống tập tin", bạn cần phải đi ngược lại thư mục/hệ thống như đọc-ghi:

mount -o rw,remount /dev/stl12 /system 

Khi hoàn tất, đi ngược lại nó như là read-only:

mount -o ro,remount /dev/stl12 /system 
0

Bạn có thể sẽ cần phải đặt TimeZone của mình và thêm người dùng root. Việc thêm người dùng root có thể được thực hiện như sau:

echo "root:x:0:0::/system/etc/crontabs:/system/bin/sh" > /system/etc/passwd 

Nhận đúng chuỗi TimeZone là lẻ. Đặt biến môi trường TZ thành chuỗi múi giờ và đảm bảo crond nhận được nó. Tôi có nó dưới sự kiểm soát của một môi trường GUI, và sử dụng sau đây để có được TimeZone (có thể không chính xác như tôi đã không thử nghiệm nó trên múi giờ khác được nêu ra).

public static String findTZS() { 
    String date = ZooGate.readShellCommand("date"); 
    String[] elements = date.split(" "); 
    String label = elements[4]; 
    TimeZone tz = Calendar.getInstance().getTimeZone(); 
    boolean dlt = tz.useDaylightTime(); 
    int offset = tz.getDSTSavings()/600000; 
    DateFormatSymbols dfs = DateFormatSymbols.getInstance(); 
    String[][] z = dfs.getZoneStrings(); 
    for (String[] za: z) { 
     if (dlt) { 
      if (za[4].equals(label)) { 
       return za[2] + offset + za[4]; 
      } else if (za[2].equals(label)) { 
       return za[2] + offset + za[4]; 
      } 
     } 
    } 
    return "UTC"; 
} 

Đồng thời đảm bảo rằng crontab của bạn được đặt tên cho người dùng (gốc) và cũng thuộc sở hữu của người dùng đó. Nếu bạn đặt crontab trên bộ nhớ trong của mình để bạn có thể chỉnh sửa nó bằng trình chỉnh sửa văn bản Android, bạn có thể biến nó thành liên kết tượng trưng thành/data/media/0. Tôi sử dụng/system/etc/crontabs/root ->/data/media/0/Cron/master

Bạn sử dụng/dữ liệu/phương tiện và/lưu trữ hoặc/sdcard vì sau này là hệ thống tệp FUSE ẩn Unix cơ bản quyền hệ thống tệp và quyền sở hữu, vì vậy bạn cần đặt quyền sở hữu trên hệ thống tệp thực trong/data.

Nếu bạn có một Android cũ hơn có sử dụng chất béo hoặc YAFFS hoặc bất cứ điều gì cho việc lưu trữ nội bộ sau đó bạn có thể phải giữ crontabs của bạn trong/hệ thống

Cẩn thận cron rằng không phải lúc nào chạy đúng thời hạn dưới Android vì nó thích ngủ.

Các vấn đề liên quan