Systemd로 수행하는 방법 (더 쉬움)
우분투 변형과 민트가 시스템으로 옮겨 졌으므로 위의 기존 솔루션이 덜 만족 스럽습니다. 웹을 검색하여 systemd로 수행하는 방법을 찾고 다른 사람들의 지혜를 결합 하고 다음 자습서를 포함하는 blogspot.com.au 의 블로그 게시물로 문서화했습니다 .
systemd를 사용하면 아래 템플릿을 사용하여 스크립트를 호출하는 하나 또는 두 개의 파일을 만들고 몇 가지 명령을 실행합니다. 단순한.
GUI 버전
먼저 시작 및 / 또는 종료시 실행할 스크립트를 작성하십시오. 둘 다 필요하지 않은 경우 하나만 수행하십시오. .scopening_atstart 및 .scfullcopy_atend를 만들었습니다.
그런 다음 파일을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하고 권한에서 파일을 프로그램으로 실행 허용을 선택했는지 확인하여 파일이 실행 가능한지 확인하십시오.
내가 만든 두 파일은 램 디스크의 내용을 채우고 저장합니다. 또한 서비스가 작동하고 있음을 증명하기 위해 내 홈 디렉토리에 파일을 만듭니다. 그것들은 형태였습니다 :
#!/bin/sh
cp -pru /home/john/zRamdisk/subdirectory1/* /home/john/.wine/drive_c/subdirectory1/
rm /home/john/stop_time
date +%D' '%T > /home/john/stop_time
그런 다음 파일 관리자를 루트로 열고 /etc/systemd/system
, startup.service 및 save-ramdisk.service 파일을 열어서 만들었습니다. 분명히 자신의 이름을 선택할 수 있으며 일반 이름에는 johns_start.service라는 시작 파일과 johns_shutdown.service라는 종료 파일이 포함될 수 있습니다. 기존 서비스 이름을 선택하지 마십시오.
[Unit]
Description=Startup Applications
[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/john/.scopening_atstart
[Install]
WantedBy=multi-user.target
과
[Unit]
Description=Save Ramdisk to Wine drive C
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/john/.scfullcopy_atend
[Install]
WantedBy=multi-user.target
동일한 서비스 파일을 사용하여 내 실행 스크립트의 전체 경로를 대체 할 수 있습니다.
마지막 으로 각각에 대해 systemctl enable your_files_name 명령을 실행하십시오 (그러나 접미사 서비스는 사용하지 않음). 첫 번째는systemctl enable startup
서비스를 시작하려면 컴퓨터를 한 번 재부팅하십시오. 시작 서비스는 systemd가 다중 사용자 대상에 진입 할 때마다 실행되고 다중 사용자 대상이 종료 될 때 중지 서비스가 실행됩니다. 활성화 조건이 다른 대체 서비스 파일에 대해서는 아래에서 설명합니다.
유용한 추가 명령은 다음과 같습니다.
systemctl is-enabled startup
systemctl is-active startup
systemctl 다시 시작 시작
자세한 내용은 위의 참조에서 찾을 수 있습니다.
CLI (명령 줄) 버전
이 설명에서는 / home / john이 아닌 홈 디렉토리에서 작업하고 필요에 따라 sudo를 사용하고 vim 또는 svim을 작성하는 편집기를 선택한다고 가정합니다.
첫 번째 라인으로 시작 및 종료 쉘 스크립트를 작성#!/bin/sh
하고를 사용하여 실행 가능하게하십시오 chmod +x my_new_filename
.
작성 위와 같이 두 개의 파일을, 또는이 예에서는 하나 개의 파일 핸들 시작 및 종료 작업에. 필자는 홈 디렉토리에서 스크립트를 실행하지만 @don_crissti는 Stack Exchange 에서 몇 가지 대안을 보여줍니다 .
svim /etc/systemd/system/start_and_stop.service
파일 내용을 복사하십시오.
[Unit]
Description=Run Scripts at Start and Stop
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/john/.startup_commands #your paths and filenames
ExecStop=/home/john/.shutdown_commands
[Install]
WantedBy=multi-user.target
그런 다음 다음 명령으로 서비스 를 활성화하십시오 .
systemctl enable start_and_stop
서비스가 활성화 된 후 시스템을 재부팅하십시오. 명령 systemctl is-enabled start_and_stop
을 systemctl is-active start_and_stop
사용하여 새 서비스를 모니터링 할 수 있습니다.
종료 트리거 조건 변경
위의 파일은 모두 다중 사용자 환경의 열기 또는 닫기를 사용하여 스크립트 실행을 시작합니다. 아래 파일은 네 가지 잠재적 종료 프로세스의 시작을 사용하여 스크립트를 시작합니다. Before 라인 + WantedBy 라인에서 대상을 추가 또는 제거하면보다 세부적으로 구별 할 수 있습니다.
이 파일은 이 게시물 의 두 번째 답변에서 제안 되었지만 설치 섹션을 추가 할 때까지 실행할 수 없었습니다.
다시 스크립트를 편집하고을 /etc/systemd/service/
사용하여 활성화하십시오 systemctl enable your_file_name
. 대상을 변경하면 systemclt disable file_name
명령을 사용한 다음 대상 디렉토리에 심볼릭 링크 된 명령을 다시 활성화했습니다. 재부팅하면 서비스가 작동합니다.
[Unit]
Description=Do something required
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
# executed before the target state is entered
# Also consider kexec.target
[Service]
Type=oneshot
ExecStart=/home/john/.my_script #your path and filename
[Install]
WantedBy=halt.target reboot.target shutdown.target