Jak edytować crontab
pliki we FreeBSD?
$ crontab -e
# ... I do my thing in vim & :wq
"crontab.9ZcXiFaawt" 6L, 203C written
crontab: temp file must be edited in place
Exit 1
Używanie EDITOR=nvi
działa dobrze ... Linux również działa dobrze ...
Problem polega na tym, jak Vim zapisuje pliki. Domyślnie tworzy kopię pliku i zastępuje oryginalny.
Możesz to zaobserwować za pomocą:
# Show the file's inode
$ ls -i a
3156153 a
# Open file in Vim, :wq
# inode changed!
$ ls -i a
3155322 a
crontab
wprawia go to w zakłopotanie (patrz :help crontab
)
Trzeba użyć :set backupcopy
, aby yes
dokonać Vima zastąpienie oryginalnego pliku:
"yes" make a copy of the file and overwrite the original one
Możesz to zrobić automatycznie dla plików crontab za pomocą:
au FileType crontab setlocal bkc=yes
@ Samoodpowiedź Martina jest poprawna. Jednak dla osób takich jak ja, które próbują ograniczyć zapełnianie vimrc
plików sporadycznymi wyjątkami - tutaj podczas edycji pliku crontab - jest pewna odmiana. Umożliwia to umieszczenie wyjątków bezpośrednio w pliku docelowym.
Poniżej moja modelka crontab:
# vim: nu et tw=130 ts=8 sts=4 sw=4 ff=unix fo-=l fo+=tcroq2 bkc=yes
Ważnym elementem jest tutaj bkc=yes
dopasowanie do vimrc
konfiguracji @ Martina . Reszta to osobiste ustawienia wygody.
Mówiąc o kompletności i refleksji, początkowa odpowiedź @ Martina jest najbardziej adekwatna w większości przypadków.
Nie ten sam błąd, ale zdarza się również dość często:
Error detected while processing /root/.vimrc:
line 2:
E319: Sorry, the command is not available in this version: syntax enable
line 7:
...
Ten błąd pojawi się, jeśli użyjesz vi
zamiast vim
crontab. Musisz ustawić edytor crontab, dodając następujący kod do swojego ~/.bashrc
pliku:
export EDITOR=vim
To samo dzieje się w OSX. Po zbadaniu problemu stwierdziłem, że działa on bezproblemowo vi
, ale nie działa vim
.
Tak więc poprawka może być:
EDITOR=vi crontab -e
Jednak vi
zwykle jest powiązany z vim
(np. W OSX), więc jest to to samo.
Można to rozwiązać za pomocą następującego wiersza w pliku vimrc :
au BufNewFile,BufRead crontab.* set nobackup | set nowritebackup
Istnieje inne obejście tego problemu poprzez dodanie następujących wierszy do pliku .vimrc :
if $VIM_NOBACKUP
set nobackup
set nowritebackup
endif
i uruchom polecenie:
VIM_NOBACKUP=1 crontab -e
Możesz także spróbować zdefiniować następującą zmienną:
EDITOR='VIM_NOBACKUP=1 vim'
Źródło: crontab: plik tymczasowy należy edytować na miejscu
Powodem tego jest sposób vim
/ sposób vi
traktowania plików kopii zapasowych.
crontab
zazwyczaj podnosi wartośćEDITOR
lubVISUAL
(jeśli jest zdefiniowana), można je ustawić:EDITOR='VIM_NOBACKUP=1 vim'
.crontab -e
generujecrontab: VIM_NOBACKUP=1 vim: No such file or directory
.