Crontab cu ed de comenzi pe flux, rezultate în "fără modificări"

0

Problema

Am încercat pentru a adăuga o linie a mea fișierul crontab. Știu că există și alte modalități de a rezolva această problemă, dar încă mai vreau să știu ce a cauzat-o. La comanda se execută pe raspberry pi 3 B+, raspbian lite este instalat, cu GNU ed 1.15, cron 3.0pl1-134+deb10u1.

Comanda care m-am blocat la asta:

$ echo -e 'a\n#asdf\n.\nwQ' | EDITOR=ed crontab -e
902
909
No modification made

Mă așteptam să adăugați linia #asdf la sfârșitul fișierul crontab, dar nu.

Setarea EDITOR='tee -a' cum a sugerat pe https://stackoverflow.com/a/30123606/8842387 nu rezolva problema. Deci, cred că este problema cu cron.

Destul de ciudat, cand dau ed comenzi de la tastatura direct, mai degrabă decât de streaming este, pur și simplu funcționează. Poate subshell crearea a cauzat problema?

Aici atașez câteva dintre ultimele linii de strace rezultatul.

$ echo -e 'a\n#asdf\n.\nwQ' | EDITOR=ed strace crontab -e
execve("/usr/bin/crontab", ["crontab", "-e"], 0x7ee54c14 /* 29 vars */) = 0
access("/etc/suid-debug", F_OK)         = -1 ENOENT (No such file or directory)
...
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\7\0\0\0\0"..., 4096) = 659
_llseek(3, -393, [266], SEEK_CUR)       = 0
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\7\0\0\0\0"..., 4096) = 393
close(3)                                = 0
getpid()                                = 18579
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 110) = 0
send(3, "<78>Nov 20 15:31:25 crontab[1857"..., 56, MSG_NOSIGNAL) = 56
openat(AT_FDCWD, "crontabs/pi", O_RDONLY) = -1 EACCES (Permission denied)
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=2995, ...}) = 0
read(4, "# Locale name alias data base.\n#"..., 4096) = 2995
read(4, "", 4096)                       = 0
close(4)                                = 0
openat(AT_FDCWD, "/usr/share/locale/en_GB.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en_GB.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en_GB/LC_MESSAGES/libc.mo", O_RDONLY) = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=1433, ...}) = 0
mmap2(NULL, 1433, PROT_READ, MAP_PRIVATE, 4, 0) = 0x76f50000
close(4)                                = 0
openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "crontabs/pi/: fdopen: Permission"..., 39crontabs/pi/: fdopen: Permission denied) = 39
exit_group(1)                           = ?
+++ exited with 1 +++

openat(AT_FDCWD, "crontabs/pi", O_RDONLY) = -1 EACCES (Permission denied) pare un pic suspect, dar nu sunt sigur de ce se deschide fișierul doar în citire.

EDIT: Cum a sugerat de către @tink, am fugit EDITOR=ed strace crontab -e pentru a vedea ce strace dă la o sesiune interactivă. Rezultatul a fost aproape la fel (doar diferite pe pid și fd numere).

Am observat că rulează echo "..." | EDITOR=ed crontab -e a ieșit cu un mesaj No modification made dar cu strace procesul se oprește fără nici un mesaj. (EDITOR=ed strace crontab -e 2>&1 | grep "No mod" imprimă nimic). Ghici strace declanșează diferite erori.

bash cron ed linux
2021-11-20 06:41:51
1

Cel mai bun răspuns

0

În urma mea VIZUALĂ comentariu, aceste a lucrat pentru mine:

( unset VISUAL; printf '%s\n' a '#abcd' . wq | EDITOR=ed crontab -e )
printf '%s\n' a '#abcd' . wq | VISUAL=ed crontab -e

În mediul meu, atât VIZUAL, cât și EDITOR sunt setate la "vim"

Sau, mai mult sens giratoriu, dar nu trebuie să maimuta cu env var. Aceasta, de asemenea, vă permite să o faci în tăcere:

crontab <(printf '%s\n' a '#asdf' . '%p' | ed -s <(crontab -l))

Am fost de a face cele de mai sus pe un Mac. Pe Linux, nu pot reproduce observațiile dumneavoastră, dar nu le pot explica.

Un mic tweak la ultima comandă de lucrări:

printf '%s\n' a '#asdf' . '%p' Q | ed -s <(crontab -l) | crontab -
2021-11-21 20:34:51

Multumesc pentru raspuns! Mi-e teamă să spun că nici una din cele două linii de mai sus a lucrat pentru mine și ultimul oferă /dev/fd/63: Not a regular file. Poate un sistem de configurare fi diferit?
bivoje

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................