배경
사용하려는 PNG 이미지 파일은 날짜를 기준으로 디렉토리에 저장됩니다. 예
/NAS-mein/data/201812/
를 들어 PNG는 해당 디렉토리에 저장됩니다./NAS-mein/data/201812/foo/bar/20181231_1500.png
PNG_path
그래서 내 홈 디렉토리에 심볼릭 링크를 만들었습니다.
ln -s /NAS-mein/data/201812/ PNG_path
다음을 통해 수동으로 업데이트할 수 있습니다.
ln -sf /NAS-mein/data/201812/ PNG_path
정상적으로 작동하고 반환됩니다.`PNG_path' -> `/NAS-mein/data/201812'
저는 CentOS 6.7 환경을 사용하고 있으며 수퍼유저 권한이 없습니다.
대상 디렉터리가 다른 사람에 의해 생성되었지만 다음과 같은 777 권한이 부여되었습니다.
drwxrwxrwx /NAS-mein/
drwxrwxrwx /NAS-mein/data/
drwxrwxrwx /NAS-mein/data/201812/
예약된 작업 사용
그런 다음 매월 1일에 이 심볼릭 링크를 자동으로 업데이트하려고 시도하므로 항상 현재 날짜의 디렉터리로 리디렉션됩니다.
crontab에서 다음과 같은 작업을 시작하려고 시도했지만
0 0 1 * * ln -sf /NAS-mein/data/$(date "+%Y%m") /home/me/PNG_path >>/home/me/.pngln.log 2>>&1
로그에 정보가 제공되지 않아도 작동하지 않습니다.
그래서 저는 다음
0 0 1 * * cd /home/me/ && ln -sf /NAS-mein/data/$(date "+%Y%m") PNG_path >>.pngln.log 2>>&1
과 같은 Bash 스크립트를 사용해 보았습니다.
#!/bin/bash
/bin/unlink "/home/me/PNG_path"
/bin/ln -sf /NAS-mein/data/$(date "+%Y%m") PNG_path >>/home/me/.pngln.log 2>>&1
그러나 심볼릭 링크가 변경되지 않고 정보가 기록되지 않기 때문에 위의 어느 것도 작동하지 않는 것 같습니다(즉, .pngln.log
어쨌든 생성되지 않습니다.)
제가 무엇을 잘못하고 있는지 잘 모르겠습니다. 아니면 단지 불법적인 용도 ln
로 사용하고 있는 것인가요?crontab
편집: 가장 의심스러운 부분, 즉 ln
표현식에 날짜 함수를 사용하는 부분을 작성하지 않은 것으로 나타났습니다.
답변1
백분율 기호는 crontab에서 특별하며 date
여기에 명령을 입력하면 이스케이프해야 합니다(참고자료 참조 man 5 crontab
).
귀하의 심볼릭 링크는 디렉토리를 가리킵니다. 다시 실행 하면 ln
링크가 해당 디렉토리에 저장됩니다.
예:
$ mkdir real
$ ln -sf real link
$ tree
.
|-- link -> real
`-- real
1 directory, 1 file
$ ln -sf real link
$ tree
.
|-- link -> real
`-- real
`-- real -> real
1 directory, 2 files
해결책은 Linux나 GNU coreutils' 또는 BSD가 있는 모든 시스템에서 ln
( 또는) 사용하는 것입니다. -n
그러면 새 링크가 생성될 때까지 링크가 가리키는 디렉터리로 내려가지 않게 됩니다.--no-dereference
ln
-h
ln
이식 가능한 솔루션은 먼저 다음을 사용하여 명시적으로 링크를 제거하는 것입니다 rm
.
ln -s some_directory link
후에:
rm link && ln -s some_directory link
답변2
crontab
ln
내 일정을 실패하게 만든 오류를 이 답변에 요약하고 싶습니다.
Kusalananda의 답변에 감사드립니다. 기록을 위해 정리했습니다.
첫째, Kusalananda가 언급했듯이 디렉토리에 대한 심볼릭 링크를 업데이트하려고 하면 디렉토리 내에 심볼릭 링크가 생성되므로 -n
플래그를 설정해야 하므로 ln
알고리즘이 참조를 따르지 않습니다.
좋아요:
ln -nsf /NAS-mein/data/$(date "+%Y%m") PNG_path
작동 안함:
ln -nsf /NAS-mein/data/$(date "+%Y%m") PNG_path
둘째, Kusalananda가 언급했듯이 cron은 %
cron에서 특별한 의미를 가지므로 이스케이프해야 합니다.
좋아요:
0 0 1 * * /bin/ln -nsf /NAS-mein/data/$(date "+\%Y\%m") PNG_path
작동 안함:
0 0 1 * * /bin/ln -nsf /NAS-mein/data/$(date "+%Y%m") PNG_path
cron
세 번째이자 마지막 항목은 실제로 or 와 실제 관련이 없지만 에 추가된 것과 동일한 대상 에 대해 쓸 수 없다는 ln
것입니다 . 반대로, 그것은 정확합니다. (실제로 for 플래그가 없으면 아무것도 출력되지 않지만 최소한 빈 로그가 생성된 것을 볼 수 있습니다.)stderr
stdout
2>>&1
2>&1
-v
ln
좋아요:
0 0 1 * * /bin/ln -nsf /NAS-mein/data/$(date "+\%Y\%m") PNG_path >>.log 2>&1
작동 안함:
0 0 1 * * /bin/ln -nsf /NAS-mein/data/$(date "+\%Y\%m") PNG_path >>.log 2>>&1