2016-12-22 54 views
6

Próbuję zaplanować skrypt bash uruchamiany z Bash na Ubuntu w systemie Windows w Windows 10. Za każdym razem, gdy mam pisać crona, otrzymuję następujące komunikaty o błędach w terminalu :Crontab nie działa z Bash na Ubuntu na Windows

crontab: installing new crontab 
/var/spool/cron/: mkstemp: Permission denied 
crontab: edits left in /tmp/crontab.4q0z3i/crontab 

Oto co wpis crontab wygląda następująco:

# m h dom mon dow command 
27 10 * * * /home/admin/test.sh > /home/admin/logs/test.log 2>&1 

Co dokładnie się dzieje?

+0

Czy twój użytek ma uprawnienia do zapisu w '/ var/spool/cron'? Czy twoje zastosowania mają uprawnienia do używania 'cron'? – Jdamian

+0

Witam @Jdamian, jak mogę to sprawdzić? W moim systemie istnieje tylko jedno konto uniksowe w bashu. – arnpry

Odpowiedz

0

Wydaje się, że crontab ma pozwolenie setgid ustawiony tak,
-rwxr-sr-x 1 root crontab 39024 May 5 2016 /usr/bin/crontab

należy zrobić sudo chown <username> /usr/bin/crontab

następnie sudo chmod g+s /usr/bin/crontab

powinien być root, aby to wszystko zrobić.

+0

Hi @Arduino Sentinel, wciąż otrzymuję ten sam komunikat o błędzie. – arnpry

+0

co jest wynikiem tego 'ls-l/var/spool/cron/crontabs' –

+0

' ls: nie można otworzyć katalogu/var/spool/cron/crontabs: Permission denied' – arnpry

0

WSL obecnie nie obsługuje procesów w tle.

+4

Czy możesz dodać referencję? – tutuDajuju

1

spróbować umieścić tego polecenia w powershell zadań systemu Windows i zobaczyć co się dzieje

bash -c "rsync -acAXvc --delete --numeric-ids /mnt/d/no_movies/* rsync://10.66.6.66/danielle_no_movies" 

bash -c „polecenia” oznacza uruchomić to polecenie używając linux podsystem powłoki bash

komenda jest „rsync --rsync_switches/mnt/windows_drive_letter/katalog_źródłowy/* rsync: // rsync_daemon_address/rsync_module "

Po prostu wymyśliłem to i nadal testuję, więc nie mogę obiecać, że to zadziała.

Używam go z okna PowerShell bez uprawnień administratora teraz i zgłasza, że ​​"wysyła listę przyrostowych plików". Menedżer zadań zgłasza, że ​​istnieje proces rsync, który wykonuje wiele zadań z napędem d:

14

Musisz dodać siebie do grupy crontab.

usermod -a -G crontab (username) 

Po wykonaniu tej czynności należy również upewnić się, że cron działa. Zwykle jest to uruchamiane z start cron, jednak usługa "upstart" nie działa na WSL z tego co wiem, ale zadanie to wykonuje sudo cron.

Jednym z zastrzeżeń jest to, że po zamknięciu wszystkich okien systemu bash, cron przestanie działać, nawet jeśli komputer działa. Jednak dopóki masz otwarte okno bash i działa cron, będzie działało zgodnie z oczekiwaniami.

+3

To pomogło, dzięki! Przypomnienie dla niektórych osób takich jak ja - Zrestartuj sesję bash, aby to zadziałało. –

+3

Ponadto, jeśli chcesz, aby cron i inne zadania w tle działały po zamknięciu wszystkich okien bash, możesz użyć tego skryptu vb przy uruchomieniu, i zachowuje on hiden instancję basha. https://gist.github.com/leonelsr/cde77574519eb1fd672bc9690e01257e – jeffpkamp

+0

Używałem do tego [wabash i jego demona] (https://github.com/cerebrate/wabash), ale dzięki za heads up! –

2

Jest tam wspomniane obejście tego błędu github, nie można go teraz znaleźć!

sudo crontab -u $USER -e