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.
/dev/fd/63: Not a regular file.
Poate un sistem de configurare fi diferit?