Estoy tratando de agregar una línea a mi archivo crontab. Sé que hay otras formas de solucionar este problema, pero todavía quiere saber cuál fue la causa. El comando se ejecuta en raspberry pi 3 B+, raspbian lite se instala, con GNU ed 1.15, cron 3.0pl1-134+deb10u1.
El comando que estoy atascado en es este:
$ echo -e 'a\n#asdf\n.\nwQ' | EDITOR=ed crontab -e
902
909
No modification made
Estoy esperando que añadir la línea #asdf
al final de mi archivo crontab, pero no es así.
Configuración EDITOR='tee -a'
como se sugiere en https://stackoverflow.com/a/30123606/8842387 no resuelve el problema. Así que supongo que es el problema con el cron.
Curiosamente, cuando doy ed comandos directamente desde el teclado, en lugar de streaming, simplemente funciona. Tal vez subshell creación causó el problema?
Aquí estoy adjuntando un par de las últimas líneas de strace
resultado.
$ 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)
parece un poco sospechoso, pero no sé por qué se abre el archivo de sólo lectura.
EDITAR:
Según lo sugerido por @tink, me encontré con EDITOR=ed strace crontab -e
a ver lo que strace
da en una sesión interactiva. El resultado fue casi el mismo (variando en epi y fd números).
Me di cuenta de que la ejecución de echo "..." | EDITOR=ed crontab -e
terminó con el mensaje No modification made
pero con strace
el proceso se detiene sin ningún tipo de mensajes. (EDITOR=ed strace crontab -e 2>&1 | grep "No mod"
se imprime nada). Supongo que la strace dispara diferentes errores.
/dev/fd/63: Not a regular file.
Tal vez algunos de la configuración del sistema a ser diferente?