Snažím sa pridávať linky na moje súbor crontab. Viem, že existujú aj iné spôsoby, ako obísť tento problém, ale stále chcete vedieť, čo spôsobilo, že. Príkaz spustiť na raspberry pi 3 B+, raspbian lite je nainštalovaný, s GNU ed 1.15, cron 3.0pl1-134+deb10u1.
Príkaz, že som uviazol na to je tento:
$ echo -e 'a\n#asdf\n.\nwQ' | EDITOR=ed crontab -e
902
909
No modification made
Ja som očakával, že ak chcete pridať riadok #asdf
na konci môjho crontab súbor, ale nie je to tak.
Nastavenie EDITOR='tee -a'
ako navrhol na https://stackoverflow.com/a/30123606/8842387 nerieši problém. Takže si myslím, že to je problém s cron.
Napodiv, keď som dať ed príkazy priamo z klávesnice, skôr ako streaming, to jednoducho funguje. Možno subshell tvorba spôsobil problém?
Tu som nasadenie niekoľkých posledných riadkov z strace
výsledok.
$ 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)
vyzerá trochu podozrivé, ale nie sú istí, prečo to otvorí súbor iba na čítanie.
ÚPRAVA:
Ako napovedá @tink, bežal som EDITOR=ed strace crontab -e
ak chcete vidieť, aké strace
dáva na interaktívnu reláciu. Výsledkom bol takmer rovnaký (iba rôznej na pid a fd čísla).
Všimol som si, že beží echo "..." | EDITOR=ed crontab -e
vystúpil so správou No modification made
ale s strace
proces sa zastaví bez akejkoľvek správy. (EDITOR=ed strace crontab -e 2>&1 | grep "No mod"
vytlačí nič). Myslím, strace spúšťa rôzne chyby.
/dev/fd/63: Not a regular file.
Možno, že niektoré konfigurácie systému byť iný?