
마운트된 드라이브에 대한 권한이 충돌하고 지속적으로 변경되므로(프로그램 개발 구조로 인해 쉽게 해결할 수 없음) 루트 권한으로 실행해야 하는 스크립트가 있습니다.
이는 으로 수행할 수 sudo /usr/serverm1/lsintd
있으며 좋은 결과를 제공합니다. 그러나 우리는 시작할 때 이 스크립트를 자동으로 실행하고 싶습니다.
시작 시 기본 사용자로 스크립트를 실행하면 권한 부족으로 인해 코어 덤프가 발생합니다. 따라서 우리는 crontab에서 다음 @reboot /usr/serverm1/lsintd
과 같이 설정할 수 있다고 생각했습니다.여기그러나 이는 루트(존재하지 않음)의 설정 및 구성을 사용하여 실행됩니다.
TLDR: 시작 시 명령으로 실행되는 것과 똑같이 스크립트를 어떻게 실행할 수 있나요 sudo /usr/serverm1/lsintd
?
chmod u+x
또한 바이너리에 적용을 시도했지만 일반 권한으로 실행한 것처럼 여전히 코어 덤프가 발생했습니다(아이디어는 다음에서 가져옴).사용자가 루트 권한으로 스크립트를 실행하도록 허용).
참고 사항:나는 이것이 다소 XY 문제라는 것을 인정합니다. 그러나 우리 서버에 있는 일부 다른 서비스의 느리고 체계적이지 않은 개발 구조로 인해 근본적인 문제를 해결할 방법이 없으며 대신 이 문제를 해결해야 합니다.
답변1
한 가지 방법은 시스템 단위를 만드는 것입니다.
가능한 모든 옵션은 여기에서 찾을 수 있습니다:www.freedesktop.org/.../systemd.unit.html
하지만 저는 간단한 예를 제시하겠습니다.
1. 각 시스템 부팅 날짜와 시간을 파일에 기록하는 bash 스크립트를 생성해 보겠습니다. 사용자 /root/file
만이 디렉터리 root
에서 파일을 쓰고 편집할 수 있는 권한을 갖습니다 . 사용자를 다음 으로 전환하겠습니다. 스크립트를 만들어 실행 가능하게 만들겠습니다./root
root
sudo su -
/root/timelog.sh
chmod +x /root/timelog.sh
#!/bin/bash
if ! [ /root/file ]; then touch /root/file; fi
echo $(date) >> /root/file
2. 이제 파일이 필요합니다 System Unit
./etc/systemd/system/timelog.service
[Unit]
Description=timelog.service
[Service]
Type=oneshot
ExecStart=/root/timelog.sh
[Install]
WantedBy=multi-user.target
3. 마지막 작업은 시스템에서 시작되는지 확인하는 것입니다.
systemctl enable timelog