crontab: 새 crontab 설치 - 경로가 너무 깁니다.

crontab: 새 crontab 설치 - 경로가 너무 깁니다.

실수. 가능한 모든 crontab 항목을 시도했지만 아무것도 허용되지 않았습니다. 언제나path too long

# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
path too long
crontab: edits left in /tmp/crontab.mqtSoV
[root@myhostname5 tmp]# cat /tmp/crontab.mqtSoV
0 * * * * /tmp/test.sh

레드햇에서 출시

# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.1 (Maipo)

통나무. 다른 로그와 Journalctl에는 cron 관련 오류가 없습니다.

Sep  5 10:01:01 myhostname5 run-parts(/etc/cron.hourly)[831]: starting 0anacron
Sep  5 10:01:01 myhostname5 run-parts(/etc/cron.hourly)[877]: finished 0anacron
Sep  5 10:01:01 myhostname5 run-parts(/etc/cron.hourly)[831]: starting 0yum-hourly.cron
Sep  5 10:01:02 myhostname5 run-parts(/etc/cron.hourly)[886]: finished 0yum-hourly.cron
Sep  5 10:10:01 myhostname5 CROND[1808]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 10:20:02 myhostname5 CROND[4266]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 10:30:01 myhostname5 CROND[6182]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 10:40:01 myhostname5 CROND[6825]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 10:50:01 myhostname5 CROND[8084]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 11:00:01 myhostname5 CROND[9467]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 11:01:01 myhostname5 CROND[9737]: (root) CMD (run-parts /etc/cron.hourly)
Sep  5 11:01:01 myhostname5 run-parts(/etc/cron.hourly)[9737]: starting 0anacron
Sep  5 11:01:01 myhostname5 run-parts(/etc/cron.hourly)[9746]: finished 0anacron
Sep  5 11:01:01 myhostname5 run-parts(/etc/cron.hourly)[9737]: starting 0yum-hourly.cron
Sep  5 11:01:01 myhostname5 run-parts(/etc/cron.hourly)[9752]: finished 0yum-hourly.cron
Sep  5 11:02:16 myhostname5 crontab[9923]: (root) BEGIN EDIT (root)
Sep  5 11:03:36 myhostname5 crontab[9923]: (root) END EDIT (root)
Sep  5 11:03:50 myhostname5 crontab[10043]: (root) LIST (root)
Sep  5 11:04:02 myhostname5 crontab[10057]: (root) BEGIN EDIT (root)
Sep  5 11:04:10 myhostname5 crontab[10057]: (root) END EDIT (root)
Sep  5 11:04:13 myhostname5 crontab[10082]: (root) LIST (root)
Sep  5 11:04:29 myhostname5 crontab[10106]: (root) BEGIN EDIT (root)
Sep  5 11:04:47 myhostname5 crontab[10106]: (root) END EDIT (root)
Sep  5 11:05:13 myhostname5 crontab[10150]: (root) BEGIN EDIT (root)
Sep  5 11:05:20 myhostname5 crontab[10150]: (root) END EDIT (root)
Sep  5 11:05:45 myhostname5 crontab[10202]: (root) BEGIN EDIT (root)
Sep  5 11:06:01 myhostname5 crontab[10202]: (root) END EDIT (root)
Sep  5 11:10:01 myhostname5 CROND[10554]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 11:20:01 myhostname5 CROND[11984]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 11:30:02 myhostname5 CROND[12979]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 11:40:01 myhostname5 CROND[14476]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 11:50:01 myhostname5 CROND[16230]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 12:00:01 myhostname5 CROND[17257]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 12:01:01 myhostname5 CROND[17441]: (root) CMD (run-parts /etc/cron.hourly)
Sep  5 12:01:01 myhostname5 run-parts(/etc/cron.hourly)[17441]: starting 0anacron
Sep  5 12:01:01 myhostname5 run-parts(/etc/cron.hourly)[17450]: finished 0anacron
Sep  5 12:01:01 myhostname5 run-parts(/etc/cron.hourly)[17441]: starting 0yum-hourly.cron
Sep  5 12:01:01 myhostname5 run-parts(/etc/cron.hourly)[17456]: finished 0yum-hourly.cron
Sep  5 12:10:01 myhostname5 CROND[18756]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep  5 12:10:26 myhostname5 crontab[18864]: (root) BEGIN EDIT (root)
Sep  5 12:10:37 myhostname5 crontab[18864]: (root) END EDIT (root)
Sep  5 12:10:45 myhostname5 crontab[18898]: (root) BEGIN EDIT (root)
Sep  5 12:11:12 myhostname5 crontab[18898]: (root) END EDIT (root)
Sep  5 12:13:24 myhostname5 crontab[19828]: (root) BEGIN EDIT (root)
Sep  5 12:13:42 myhostname5 crontab[19828]: (root) END EDIT (root)
Sep  5 12:13:57 myhostname5 crontab[19900]: (root) BEGIN EDIT (root)
Sep  5 12:14:09 myhostname5 crontab[19900]: (root) END EDIT (root)
Sep  5 12:15:16 myhostname5 crontab[20132]: (root) BEGIN EDIT (root)
Sep  5 12:15:28 myhostname5 crontab[20132]: (root) END EDIT (root)
Sep  5 12:16:05 myhostname5 crontab[20190]: (root) BEGIN EDIT (root)
Sep  5 12:16:25 myhostname5 crontab[20190]: (root) END EDIT (root)

crontab의 작업을 모니터링합니다. /var/..에 심볼릭 링크가 없습니다.

# ls -ald /var/ /var/spool/ /var/spool/cron/
drwxr-xr-x. 20 root root 4096 Aug 10 19:14 /var/
drwxr-xr-x. 14 root root 4096 May  2 11:42 /var/spool/
drwx------.  2 root root 4096 Jul  8  2014 /var/spool/cron/


# crontab -l
no crontab for root

여기서 strace 출력은 다음과 같습니다.gist.github.com

debuginfo이게 뭔지 모르겠어요

# yum --enablerepo='*' install cronie-debuginfo
Loaded plugins: priorities, product-id, rhnplugin, subscription-manager
This system is receiving updates from RHN Classic or Red Hat Satellite.
47 packages excluded due to repository priority protections
No package cronie-debuginfo available.
Error: Nothing to do

# yum --enablerepo='*' search debuginfo
Loaded plugins: priorities, product-id, rhnplugin, subscription-manager
This system is receiving updates from RHN Classic or Red Hat Satellite.
47 packages excluded due to repository priority protections
============================================================================================== N/S matched: debuginfo ==============================================================================================
percona-xtrabackup-24-debuginfo.x86_64 : Debug information for package percona-xtrabackup-24
riemann-dash-debuginfo.x86_64 : Debug information for package riemann-dash
yum-plugin-auto-update-debug-info.noarch : Yum plugin to enable automatic updates to installed debuginfo packages
zfs-debuginfo.x86_64 : Debug information for package zfs

  Name and summary matches only, use "search all" for everything.

답변1

오류가 조금 이상합니다. 더 자세히 조사하려면 gdbcrontab 명령에 대한 debuginfo 패키지를 설치하여 이것이 무엇을 하려는지 확인할 수 있습니다. 내 명령은 다음을 수행하여 알게 된 것처럼 crontabpackage 의 일부입니다 .cronie

$ rpm -qf $(command -v crontab)
cronie-1.4.12-5.fc22.x86_64

다음 명령을 사용하여 debuginfo 패키지를 설치할 수 있습니다 dnf.

$ sudo dnf --enablerepo='*-debuginfo' install cronie-debuginfo

이제 gdb에서 명령을 실행하고 C 코드에 사용되는 함수 이름에 액세스할 수 있습니다. 호출할 때 오류 메시지가 나타나는 것으로 확인되었으므로 glue_strings()거기에 중단점을 설정하십시오. 일반적으로 setuid 루트 이므로 crontabgdb를 실행하려면 루트가 필요합니다. (여기에 (gdb)gdb 인쇄에 대한 팁이 있습니다).

# gdb crontab
(gdb) break glue_strings

프로그램을 시작 run하고 다음 매개변수를 입력합니다 crontab.

(gdb) run -e

glue_strings()호출할 때 전달된 매개변수 덤프가 표시되어야 합니다.

Breakpoint 1, glue_strings (buffer=0x7ffdaa552740 "", buffer_size=4096, 
    a=0x55c50950e567 "/var/spool/cron", b=0x55c5097154c0 <User> "meuh", 
    separator=47 '/') at misc.c:110
110             if (buffer_size <= 0)

c계속하려면 명령을 입력하세요 . 여러 통화가 있을 수 있습니다. 방송이 끝나기 전 마지막 장면이 가장 재밌었다. 추가 진단을 위해 이 출력을 원본 게시물에 추가하세요.


debuginfo를 얻기 위한 위 명령은 Fedora에 적용됩니다. Red Hat 7.1의 경우 다음을 참조하세요.이 기사채널 목록을 말하는 것 같습니다.

subscription-manager repos --list | grep -i debug

원하는 것을 활성화합니다.

subscription-manager repos --enable=rhel-rs-for-rhel-7-server-fastrack-debug-rpms

관련 정보