Sto cercando di aggiungere una riga al mio file crontab. So che ci sono altri modi per risolvere questo problema, ma ancora voglia di sapere che cosa ha causato. Il comando viene eseguito su raspberry pi 3 B+, raspbian lite è installato, con GNU ed 1.15, cron 3.0pl1-134+deb10u1.
Il comando che mi sono bloccato su questo:
$ echo -e 'a\n#asdf\n.\nwQ' | EDITOR=ed crontab -e
902
909
No modification made
Sto aspettando di aggiungere la riga #asdf
alla fine del mio file crontab, ma non è così.
Impostazione EDITOR='tee -a'
come suggerito in https://stackoverflow.com/a/30123606/8842387 non risolve il problema. Quindi credo che sia il problema con cron.
Stranamente, quando do ed i comandi direttamente dalla tastiera, piuttosto che la riproduzione in streaming, funziona e basta. Forse subshell creazione causato il problema?
Qui vi allego un paio di ultime righe da strace
risultato.
$ 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)
sembra un po ' sospetto, ma non certo perché si apre il file in sola lettura.
EDIT:
Come suggerito da @campanellino, mi sono imbattuto EDITOR=ed strace crontab -e
per vedere cosa strace
dà su una sessione interattiva. Il risultato è quasi lo stesso (con variazioni sul pid e fd numeri).
Ho notato che in esecuzione echo "..." | EDITOR=ed crontab -e
terminato con messaggio No modification made
ma con strace
il processo si interrompe senza alcun messaggio. (EDITOR=ed strace crontab -e 2>&1 | grep "No mod"
viene stampato nulla). Indovinare il strace innesca diversi errori.
/dev/fd/63: Not a regular file.
Forse alcuni di configurazione di sistema di essere diversi?