2013-05-25 17 views
16

nie mogę znaleźć odpowiedzi na moje pytanie: Czy jest możliwe, aby ponownie uruchomić crontab Android przy użyciu busybox (lub inne środki)Jak korzystać z crontab w systemie Android?

próbował uruchomić crontab, i narzekają nieznanego UID 0.

Tried uruchomić ponownie komputer i nic nie robi.

Albo proszę o niemożliwe teraz?

+0

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

Odpowiedz

19

Wymagania

  1. dostępu administratora: dla commads superużytkownika jak restarcie lub init.d config. Crond może nadal działać pod normalnymi prawami użytkownika.

  2. Busybox: dla 'crond' usługa

  3. (opcjonalnie) Wsparcie init.d: ​​Aby uruchomić usługę '' crond w bagażniku

Tworzenie cronjob

Stworzy cronjob w katalogu/data/crontab/(może to być dowolny dostępny katalog nawet w sdcard) z nazwą pliku "root". Napisz swoje cronjob wewnątrz pliku "root".

echo '

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

testowy bez restartu

teraz otworzyć dowolny emulator terminala w urządzenia i uruchom następujące komendy ..

su -

crond -b -c/data/crontab

Teraz usługa crond rozpocznie się, by sprawdzić typ ...

pgrep -l crond Albo ps | grep crond

start crond w bagażniku

utworzyć plik z pozwoleniem na /system/etc/init.d wykonywalnego:

echo '

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

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

Przykład cronjobs

53 * * * * restart

będzie ponowne uruchomienie urządzenia w 53. minucie każdej godziny.

Uwaga: 1. Jeśli modyfikujesz crontab, pamiętaj, aby zrestartować demona crond po zabiciu istniejącego.

  1. Czasami crond może nie przekazywać w strefie czasowej systemu Android, może użyć UTC zamiast tego.
+0

W sekcji 'Start crond at boot' command nie powinno być' crond -b -c/data/crond' ale 'crond -b -c/data/cronjob' – zen

0

jeśli masz błąd „tylko do odczytu systemu plików”, należy ponownie zamontować/system do odczytu zapisu:

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

Po zakończeniu zamontować go jako tylko do odczytu:

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

Najprawdopodobniej będziesz musiał ustawić strefę czasową i dodać użytkownika root. Dodanie użytkownika root można wykonać w ten sposób:

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

Właściwy odbiór Łańcuch TimeZone jest nieparzysty. Ustaw zmienną środowiskową TZ na ciąg strefy czasowej i upewnij się, że crond ją pobiera. Mam go pod kontrolą środowiska graficznego i wykorzystuję następujące elementy do uzyskania strefy czasowej (może nie być poprawna, ponieważ nie testowałem jej jeszcze w innych strefach czasowych).

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"; 
} 

Upewnij się również, że twój plik crontab ma nazwę użytkownika (root) i jest również własnością tego użytkownika. Jeśli ustawisz plik crontab w pamięci wewnętrznej, aby można było go edytować za pomocą edytorów tekstu Androida, możesz utworzyć dowiązanie symboliczne do/data/media/0. Używam/system/etc/crontabs/root ->/data/media/0/Cron/master

Używasz/data/media i/storage lub/sdcard, ponieważ ten drugi jest systemem plików FUSE, który ukrywa bazowy Unix uprawnienia do systemu plików i prawa własności, więc musisz ustawić prawo własności do rzeczywistego systemu plików w/data.

Jeśli masz starszą Android, który wykorzystuje tłuszcz lub YAFFS lub cokolwiek do pamięci wewnętrznej to może trzeba zachować crontaby w/system

Pamiętaj, że cron nie zawsze uruchamiane na czas pod Androida, ponieważ lubi zaspać.

Powiązane problemy