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.service
file.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.