.sh
로그 아웃 및 우분투 종료시 bash를 사용하여 파일 을 실행하고 싶습니다 . 웹을 위아래로 검색했으며 KDE 및 GNOME에 대한 수정 사항 만 발견했습니다. 스크립트는 간단합니다. "logoff / shutdown"파일에 코드 줄을 추가 할 수 있는지 아니면 다른 스크립트에서 참조해야하는지 알아야합니다.
systemd
사람들이 맨 처음에 볼 수 있도록 업데이트 된 답변 수락 (을 사용 )을 고려 하십시오.
.sh
로그 아웃 및 우분투 종료시 bash를 사용하여 파일 을 실행하고 싶습니다 . 웹을 위아래로 검색했으며 KDE 및 GNOME에 대한 수정 사항 만 발견했습니다. 스크립트는 간단합니다. "logoff / shutdown"파일에 코드 줄을 추가 할 수 있는지 아니면 다른 스크립트에서 참조해야하는지 알아야합니다.
systemd
사람들이 맨 처음에 볼 수 있도록 업데이트 된 답변 수락 (을 사용 )을 고려 하십시오.
답변:
다음 줄을 추가하십시오.
session-cleanup-script=/path/to/script
에서 /etc/lightdm/lightdm.conf
파일.
이 변경 사항을 적용하려면 lightdm을 다시 시작해야합니다. 이를 위해서는 tty1에서 Ctrl+ Alt+를 사용 F1하여 사용자 이름과 비밀번호로 로그인 한 후 다음 명령을 실행하십시오 :
sudo service lightdm restart
참고 : 그래픽 세션으로 전환 하려면 Ctrl+ Alt+ F7를 사용하십시오.
/etc/rc0.d
sudo chmod +x K99_script
K99
적절한 시간에 시작해야합니다 ./etc/rc6.d
sudo chmod +x K99_script
K99
적절한 시간에 시작해야합니다 .출처 :
K
은 런레벨 0, 1 및 6과 S
런레벨 2, 3, 4 및 5로 시작해야합니다. ii) 스크립트를 호출 할 필요 는 없습니다 K99_foo
. 숫자는 스크립트 실행 순서를 결정합니다. 마지막으로 실행하려면 다른 스크립트보다 큰 것을 선택해야합니다. iii) 런레벨 0은 재부팅이 아닙니다! ; 종료 용입니다. 6은 재부팅을위한 것입니다. iv) 스크립트는 /etc/rcN.d
디렉토리에 비즈니스가 없습니다 . 그들은 대신에해야 /etc/init.d
하고 연결 에 /etc/rcN.d
.
2016 년 6 월 이후에이 스레드를 찾으면 Mint을 포함한 Ubuntu 및 파생 제품은 systemd를 사용하여 시스템 초기화 및 종료를 제어합니다. 나는 오래된 접근 방식에 문제가 있었으므로 체계적인 방법을 연구했습니다.
systemd를 사용하면 아래 템플릿을 사용하여 스크립트를 호출 할 하나 또는 두 개의 파일을 만들고 명령을 실행합니다. 단순한.
먼저 시작 및 / 또는 종료시 실행할 스크립트를 작성하십시오. .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가 다중 사용자 대상에 진입 할 때마다 실행되고 다중 사용자 대상이 종료 될 때 중지 서비스가 실행됩니다. 활성화 조건이 다른 대체 서비스 파일이 아래에 설명됩니다.
이 설명에서는 / 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 라인에서 대상을 추가 또는 제거하면보다 세부적으로 구별 할 수 있습니다.
이 파일은 @Matthias의 Unix & Linux 답변에서 제안되었지만 설치 섹션을 추가 할 때까지 실행할 수 없었습니다.
다시 스크립트를 편집하고을 /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
man systemd.unit
사용자 생성 파일 에 따라 $XDG_CONFIG_HOME/systemd/user
다른 로컬 사용자 위치에 배치 할 수 있습니다