파일 수정 날짜를 기준으로 crontab을 실행하는 방법은 무엇입니까?

파일 수정 날짜를 기준으로 crontab을 실행하는 방법은 무엇입니까?

file.config의 수정 날짜가 최근인 경우 file.py를 실행할 수 있는 방법이 있습니까? 파일이 수정되면 스크립트를 실행하는 것과 같은가요?

미리 감사드립니다!

답변1

이는 systemd를 통해 수행할 수 있습니다.경로 단위:

# /etc/systemd/system/file.path
[Unit]
Description=Watches file.config for changes

[Path]
PathChanged=/path/to/file.config

[Install]
WantedBy=multi-user.target

파일이 변경될 때마다 감시 file.config하고 트리거 됩니다. 다음을 사용하여 Python 스크립트를 실행할 수 있습니다.file.servicefile.service

#/etc/systemd/system/file.service
[Unit]
Description=Does something after changing file.config

[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /path/to/file.py

그것을 테스트하는 데 사용합니다 systemctl start file.path. 그 다음에 touch /path/to/file.config. 화재를 봐야합니다 file.py.

카탈로그도 보실 수 있습니다. 새 파일이 디렉터리에 추가되면 경로를 트리거하고 해당 파일을 처리할 수 있습니다.


내 시스템에서 몇 가지 테스트를 수행하여 작동하는지 확인했습니다.

stew@laptop:~/.config/systemd/user$ cat file.{path,service}
[Path]
PathChanged=%h/file
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo I did something'

$ systemctl --user start file.path
$ touch ~/file
$ systemctl --user status file.service
● file.service
     Loaded: loaded (/home/stew/.config/systemd/user/file.service; static)
     Active: inactive (dead) since Fri 2022-08-05 16:29:44 CEST; 1s ago
TriggeredBy: ● file.path
    Process: 296588 ExecStart=/bin/bash -c echo I did something (code=exited, status=0/SUCCESS)
   Main PID: 296588 (code=exited, status=0/SUCCESS)
        CPU: 2ms

Aug 05 16:29:44 SIM-5532-007 systemd[1746]: Starting file.service...
Aug 05 16:29:44 SIM-5532-007 bash[296588]: I did something
Aug 05 16:29:44 SIM-5532-007 systemd[1746]: file.service: Succeeded.
Aug 05 16:29:44 SIM-5532-007 systemd[1746]: Finished file.service.
$ touch ~/file
$ touch ~/file
$ journalctl --user -u file.service -f
-- Journal begins at Mon 2022-05-30 10:11:55 CEST. --
Aug 05 16:29:44 SIM-5532-007 systemd[1746]: Starting file.service...
Aug 05 16:29:44 SIM-5532-007 bash[296588]: I did something
Aug 05 16:29:44 SIM-5532-007 systemd[1746]: file.service: Succeeded.
Aug 05 16:29:44 SIM-5532-007 systemd[1746]: Finished file.service.
Aug 05 16:29:50 SIM-5532-007 systemd[1746]: Starting file.service...
Aug 05 16:29:50 SIM-5532-007 bash[296594]: I did something
Aug 05 16:29:50 SIM-5532-007 systemd[1746]: file.service: Succeeded.
Aug 05 16:29:50 SIM-5532-007 systemd[1746]: Finished file.service.
Aug 05 16:30:10 SIM-5532-007 systemd[1746]: Starting file.service...
Aug 05 16:30:10 SIM-5532-007 bash[296621]: I did something
Aug 05 16:30:10 SIM-5532-007 systemd[1746]: file.service: Succeeded.
Aug 05 16:30:10 SIM-5532-007 systemd[1746]: Finished file.service.


관련 정보