Crontab con ed por comandos en secuencia, los resultados en "ninguna modificación"

0

Pregunta

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.

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

Mejor respuesta

0

Después de mi comentario VISUAL, estos trabajó para mí:

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

En mi entorno, tanto VISUAL y EDITOR se establece en "vim"

O, más indirecta, pero no es necesario mono con env variables. Esto también le permite hacerlo en silencio:

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

Yo estaba haciendo el de arriba en un Mac. En Linux, puedo reproducir tus observaciones, pero no puede explicar.

Una pequeña modificación en el último comando funciona:

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

Gracias por la respuesta! Me da miedo decir que ninguna de las dos líneas anteriores trabajó para mí y la última da /dev/fd/63: Not a regular file. Tal vez algunos de la configuración del sistema a ser diferente?
bivoje

En otros idiomas

Esta página está en otros idiomas

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