Да, модуль Xorg позволяет Вам совместно использовать свои:0 (локальных) дисплеев. В/etc/X11/xorg.conf в разделе "Module" добавляют
Load "vnc"
и в разделе "Screen" добавьте:
Option "SecurityTypes" "VncAuth"
Option "UserPasswdVerifier" "VncAuth"
Option "PasswordFile" "/root/.vnc/passwd"
Действительно исследуйте другие опции для "UserPasswdVerifier". Сервер VNC будет, слушая на tcp порте 5900. Даже с помощью VPN я непосредственно не соединился бы с портом. Блокируйте весь non-localhost доступ и используйте туннель SSH.
Спасите себя от боли, используйте лучший язык!
Вот сценарий, который вам нужен в PowerShell:
$yesterday = [DateTime]::Today.AddDays(-1).ToString("yyMMdd")
copy \\server01\E$\LogFiles\IVR\bcR\??${yesterday}.* \\LBC\workgroup\cs\ftp\Team\bcR\
copy \\server02\E$\LogFiles\IVR\bcR\??${yesterday}.* \\LBC\workgroup\cs\ftp\Team\bcR\
copy \\server03\E$\LogFiles\IVR\bcR\??${yesterday}.* \\LBC\workgroup\cs\ftp\Team\bcR\
copy \\server04\E$\LogFiles\IVR\bcR\??${yesterday}.* \\LBC\workgroup\cs\ftp\Team\bcR\
Используйте эти инструкции , чтобы помочь вам запланировать копирование
Поскольку получение вчерашней даты включает в себя различные границы (месяц, годы, високосные годы), это быстро становится немного сложнее, чем можно подумать. Приведенный ниже сценарий представляет собой небольшую модификацию этого сообщения и зависит от языковых настроек вашего компьютера (запустите DATE / T
в командной строке).
@echo off
for /f "tokens=1" %%i in ('date /t') do set thedate=%%i
set yy=%thedate:~2,2%
set mm=%thedate:~5,2%
set dd=%thedate:~8,2%
echo Today : %yy%%mm%%dd%
if %dd%==08 (
set dd=8 ) else (
if %dd%==09 (
set dd=9 ) )
if %mm%==08 (
set mm=8 ) else (
if %mm%==09 (
set mm=9 ) )
set /A dd=%dd% - 1
set /A mm=%mm% + 0
if /I %dd% GTR 0 goto DONE
set /A mm=%mm% - 1
if /I %mm% GTR 0 goto ADJUSTDAY
set /A mm=12
set /A yy=%yy% - 1
:ADJUSTDAY
if %mm%==1 goto SET31
if %mm%==2 goto LEAPCHK
if %mm%==3 goto SET31
if %mm%==4 goto SET30
if %mm%==5 goto SET31
if %mm%==6 goto SET30
if %mm%==7 goto SET31
if %mm%==8 goto SET31
if %mm%==9 goto SET30
if %mm%==10 goto SET31
if %mm%==11 goto SET30
if %mm%==12 goto SET31
goto ERROR
:SET31
set /A dd=31 + %dd%
goto DONE
:SET30
set /A dd=30 + %dd%
goto DONE
:LEAPCHK
set /A tt=%yy% %% 4
if not %tt%==0 goto SET28
set /A tt=%yy% %% 100
if not %tt%==0 goto SET29
set /A tt=%yy% %% 400
if %tt%==0 goto SET29
:SET28
set /A dd=28 + %dd%
goto DONE
:SET29
set /A dd=29 + %dd%
:DONE
if /i %dd% LSS 10 set dd=0%dd%
if /I %mm% LSS 10 set mm=0%mm%
set YESTERDAY=%yy%%mm%%dd%
echo Yesterday: %YESTERDAY%
Выполнение подобных действий в командных файлах cmd является чисто мазохистским.
Но на любом другом языке это легко (bash под cygwin, возможно, powershell; даже vbscript может сделать это достаточно легко).
Так что просто используйте любой другой язык сценариев, чтобы либо сделать все это, либо записать временный командный файл и выполнить его.
Пример на perl:
#!/usr/bin/perl
use strict;
use Date::Format;
my $date = time2str("%y%m%d", time-86400);
for ( qw(01 02 03 04) ) {
print "copy \\\\server$_\\E\$\\LogFiles\\IVR\\bcR\\??$date.* \\\\LBC\\workgroup\\cs\\ftp\\Team\\bcR\\", "\n";
}
Скажем, это называется writebatch .pl. Тогда ваш сценарий может быть чем-то вроде
perl writebatch.pl > "%TEMP%\dailycopies.cmd"
call "%TEMP%\dailycopies.cmd"
Или вы можете делать копии прямо из сценария. В Perl, вы должны использовать модуль File :: Copy. Если вы выберете любой другой инструмент для создания сценариев, он также будет иметь некоторую функцию копирования файлов.
Если ваш основной сценарий имеет в сценарии Windows Shell Script, моим решением для этого было бы получение файла .CMD для создания [небольшого] файла .VBS в % TEMP%, затем запустите его с помощью вызова cscript.exe , заключенного в команду for / f . Фактический VBScript может затем использовать DateDiff . Я использовал эту технику на наших компьютерах с Windows Server 2003, где мы не развернули PowerShell по умолчанию. Если вы работаете на платформе Windows NT6, используйте PowerShell.
Если вы можете использовать powershell, почему бы не сделать это с помощью этой простой строки:
powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\")
Это пример, который выводит фактические год, месяц, день, час, минуту и секунду.
См. Последнюю часть, это нужный вам формат, поэтому вы можете получить его в желаемом формате.
Объяснение того, что он делает:
.ToString (
... ])
форматирует вывод [DateTime] :: Now
в формате yyyyMMdd_hhmmss
И если вы хотите, чтобы это было в bacth-файле, вы можете использовать трюк для / f "delims ="
см. пример:
for /f "delims=" %a in ('powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\"^)') do @echo DateTime is: %a
Если вы хотите использовать его внутри файла .BAT или .CMD, вы должны удвоить% следующим образом:
for /f "delims=" %%a in ('powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\"^)') do @echo DateTime is: %%a
Примечание для импорта: символ ^ - t избегайте видеть) как final, так же, как \ делает это "внутри powershell и т. д. Это мета-символ, который говорит, что следующий символ не должен интерпретироваться.
И если вам нужно datetime внутри переменной в пакете, см. это:
@ECHO OFF
for /f "delims=" %%a in ('powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\"^)') do @Set MyVariable=%%a
ECHO %MyVariable%
PD: Есть побочные эффекты при использовании PowerShell, он изменяет окно CMD размер и шрифт (и пусть они меняются после выхода), также иногда требуется несколько секунд для запуска такой простой команды.
for / f "delims =" %% a in ('powershell -Command [DateTime] :: Today.AddDays ^ (- 1 ^). ToString ^ (\ "yyyyMMdd \" ^ )') делать ( установить onedayold = %% a )
Дата Время
for /f "delims=" %%a in ('powershell -Command [DateTime]::Now.AddDays^(-1^).ToString^(\"dd-MMM-yyyy\"^)') do @Set MyVariable=%%a
Только Дата
for /f "delims=" %%a in ('powershell -Command [DateTime]::Today.AddDays^(-1^).ToString^(\"dd-MMM-yyyy\"^)') do @Set MyVariable2=%%a