Je suis en train d'ajouter une ligne à mon fichier crontab. Je sais qu'il y a d'autres façons de contourner ce problème, mais toujours envie de savoir ce qui a causé il. La commande est exécutée sur raspberry pi 3 B+, raspbian lite est installé, avec GNU ed 1.15, cron 3.0pl1-134+deb10u1.
La commande que je suis coincé sur cette:
$ echo -e 'a\n#asdf\n.\nwQ' | EDITOR=ed crontab -e
902
909
No modification made
Je suis en espérant que cela, ajoutez la ligne #asdf
à la fin de mon fichier crontab, mais il ne le fait pas.
Réglage EDITOR='tee -a'
comme l'a suggéré sur https://stackoverflow.com/a/30123606/8842387 ne permet pas de résoudre le problème. Donc je suppose que c'est le problème avec cron.
Assez étrangement, quand je donne ed commandes à partir du clavier directement, plutôt que de les diffuser, il fonctionne, tout simplement. Peut-être que shell interne est exécuté création cause de ce problème?
Ici, je suis attacher un peu des dernières lignes de strace
résultat.
$ 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)
l'air un peu suspect, mais vous ne savez pas pourquoi il ouvre le fichier en lecture seule.
EDIT:
Comme suggéré par @tink, j'ai couru EDITOR=ed strace crontab -e
pour voir ce que strace
donne sur une session interactive. Le résultat était presque le même (seule variable sur les pid et fd numéros).
J'ai remarqué que l'exécution de echo "..." | EDITOR=ed crontab -e
terminé avec le message No modification made
mais avec strace
le processus s'arrête sans aucun message. (EDITOR=ed strace crontab -e 2>&1 | grep "No mod"
imprime rien). Deviner le strace déclenche des erreurs différentes.
/dev/fd/63: Not a regular file.
Peut-être que certains de configuration du système d'être différent?