Crontab dosyama bir satır eklemeye çalışıyorum. Bu soruna geçici bir çözüm bulmanın başka yolları olduğunu biliyorum, ancak yine de buna neyin neden olduğunu bilmek istiyorum. Komut ahududu pi 3 B+ üzerinde çalıştırılır, GNU ed 1.15, cron 3.0pl1-134+deb10u1 ile raspbian lite yüklenir.
Sıkışıp kaldığım komut şudur::
$ echo -e 'a\n#asdf\n.\nwQ' | EDITOR=ed crontab -e
902
909
No modification made
Satır eklemesini bekliyorum #asdf
crontab dosyamın sonunda, ama değil.
Ayar EDITOR='tee -a'
önerildiği gibi https://stackoverflow.com/a/30123606/8842387 bu sorunu çözmez. Sanırım cron ile ilgili sorun bu.
Garip bir şekilde, doğrudan klavyeden ed komutları verdiğimde, akış yerine, sadece çalışır. Belki de alt kabuk oluşturma soruna neden oldu?
İşte son satırlardan birkaçını ekliyorum strace
sonuç.
$ 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)
biraz şüpheli görünüyor, ancak dosyayı neden salt okunur açtığından emin değilim.
düzenlemek:
@Tink tarafından önerildiği gibi koştum EDITOR=ed strace crontab -e
ne olduğunu görmek için strace
etkileşimli bir oturum verir. Sonuç hemen hemen aynıydı (sadece pıd ve fd sayılarına göre değişiyordu).
Çalışan fark ettim echo "..." | EDITOR=ed crontab -e
mesajla çıkıldı No modification made
ama ile strace
işlem herhangi bir ileti olmadan durur. (EDITOR=ed strace crontab -e 2>&1 | grep "No mod"
parmak izi yok). Strace farklı hataları tetikler sanırım.
/dev/fd/63: Not a regular file.
Belki bazı sistem yapılandırması farklı olabilir mi?