איך *לא* לחפש עובד

בימים אלו, כאשר שוק הדרושים הוא שוק די מצומצם, וחברות כח אדם רבות פשוט מנסות לדחוף בכל הכח מועמדים שלהם, נוצרים מצבים תמוהים, לעיתים משעשעים, של דרישות עבודה בשמיים כאשר אין שום אפשרות למלא אותם.

חברת X (כן, השם שמור) מחפשת זה 4 חודשים איש IT בתחום ה-Linux. בימים כאלו כאשר חרב הפיטורין מתנופפת לכל עבר, לא אמורה להיות בעיה להשיג איש כזה, אולם החברה החליט “קצת” לנפח את המשרה. מה הניפוח? שימו לב לחלק מהדרישות שנוספו לאחרונה:

  • אותו איש אמור להבין טוב בפיתוח Kernel ב-Linux כדי לפתח דברים.
  • אותו איש גם אמור להבין טוב בגירסאות ולשחרר גרסאות הן של ה-Kernel וגם של המוצר עצמו
  • אותו איש גם אמור להבין טוב ב-Windows ולבצע עבודות תחזוקת מחשבים ניידים, מחשבים רגילים, להתקין עליהם Windows XP, Vista
  • אותו איש גם אמור לתחזק שרתי Windows 2003
  • וכמובן, אותו איש אמור גם לכתוב את הסקריפטים, לתכנן, להקים ולתחזק את שרתי ה-Linux בחברה.

בהתחלה הדרישות היו פשוטות: איש Linux שאמור לבנות מחדש את שרתי ה-Linux כולל כל הסקריפטים הדרושים להתממשקות, הסתנכרנות ועוד בין שרתי הלינוקס לבין המשתמשים, אולם אז מישהו בחברת X החליט שהוא רוצה את כל הסעיפים המוזרים למעלה גם באותו אדם.

מהכרותי עם שוק מפתחי ה-Linux kernel בארץ אני יכול לאמר בפירוש שאין אפשרות (אוקיי, סיכויים מאוד מאוד נמוכים) להשיג אדם כזה. מפתחי ליבה ב-Linux אינם יודעים ו/או אינם רוצים לעשות עבודות IT, בוודאי שלא לעזוב פיתוח באמצע כדי לטפל ב-Outlook של המזכירה, לטפל בסקריפט שלא רץ על אחד השרתים או לטפל באחד החוליים של Windows Server 2003. זה לא מתאים להם והם לא בנויים לכך.

בשיחותיי עם ציידי ראשים שמחפשים עובדים לחברה זו הבנתי כי הנקודה הזו הובהרה להם עשרות פעמים אך הם מעדיפים לחפש בדיוק אדם כזה ותו לא, ו”בדחיפות עליונה”. החלטה בריאה היתה לחלק את העבודה כמובן ל-2 אנשים כאשר אחד יהיה עסוק בפיתוח והשני יעשה את עבודות ה-IT.

ביהדות אומרים “תפסת מרובה לא תפסת”, נראה כי חברה זו היא מעדיפה ללמוד את הלקח בדרך הקשה ולממש את הפתגם. זכותם כמובן.

(כותב שורות אלו אינו כותב זאת מתוך “נקמה” באותה חברה, אלא רק להבהיר לקוראים עד כמה אפשר למשוך את החוט מבחינת דרישות)

על Cygwin עם crontab ועל Windows 2003

למי שלא מכיר, Cygwin היא מעין מערכת דומה ל-Linux שרצה על Windows (החל מ-Windows 98 ומעלה). היא מאפשרת להריץ תוכנות שנכתבו עבור מערכות יוניקס כמו לינוקס והודרו (Compiled) על Cygwin. התוכנה מאפשרת בעצם להנות מ-2 העולמות: גם Windows וגם “מעין” Linux ללא הפסד מהירות בביצועים. אין צורך להסתבך עם דרייברים או קרנל. מתקינים, מריצים.

השבוע הייתי צריך להריץ מספר דברים על Cygwin כאשר מצאתי שהמערכת שמריצה את ה-Cygwin באותו שרת זה Windows 2003, ואם יש משהו ש-Windows 2003 לא אוהב, זה שתוכנית משתמשת במשתמשים אחרים כדי להריץ סקריפטים, שזה בעצם מה ש-Crontab עושה, ו-Windows 2003 עושה את המוות לדברים כאלו.

אפשרי ב-cygwin להריץ את crontab בתור JOB, אך אם מפעילים את ה-CYGWIN מחדש, ה-JOB מת ויש צורך להפעיל אותו מחדש. אפשר להריץ את crontab גם כ-Service, אולם הגדרות המחדל של Windows 2003 ימנעו מ-crontab לרוץ נורמלי. בשביל זה הפתרון הר”מ.

לאחר שבזבזתי כמה שעות על כך, הצלחתי למצוא פתרון איך להריץ את Crontab בצורה של שרות (Service) על Windows 2003. להלן ההוראות:

  • התחבר ל-Windows בתור Administrator או משתמש בעל זכויות של Local Administrator לפחות.
  • פתח cygwin
  • לאחר מכן, יש להעתיק את הפקודות הבאות ישירות לקונסולה:

net user cron_server /add /yes
net localgroup Administrators cron_server /add
editrights -a SeAssignPrimaryTokenPrivilege -u cron_server
editrights -a SeCreateTokenPrivilege -u cron_server
editrights -a SeIncreaseQuotaPrivilege -u cron_server
editrights -a SeServiceLogonRight -u cron_server
mkpasswd -l -u cron_server >> /etc/passwd
editrights -a SeDenyInteractiveLogonRight -u cron_server
editrights -a SeDenyNetworkLogonRight -u cron_server
editrights -a SeDenyRemoteInteractiveLogonRight -u cron_server
cygrunsrv -I cron -p /usr/sbin/cron -a -D -d "Cygwin cron service" -e "CYGWIN=tty ntsec" -u cron_server –w XXXXX

  • אם שמת לב, בסוף הפקודות יש XXXXX – שם אמורה להיכנס הסיסמא של המשתמש עם הרשאות Local Administrator.
  • כל רשימת הפקודות האלו יוצרת משתמש בשם cron_server ומאפשרת לו להריץ את שרות crontab כ-service ב-Windows. אפשר לפתוח חלון services (ב-Windows אפשר ללחוץ על run ולכתוב: services.msc) ולוודא שהשרות רץ. אם לא, אפשר להתחיל אותו. הוא יתחיל אוטומטית בכל פעם שהמערכת תופעל מחדש.
  • אחד הבאגים המעצבנים שגיליתי הוא שגם כשהתחלת את השרות של cron, הסקריפטים ש-Cron אמור להריץ (מה שנמצא ב-crontab) לעיתים לא רצים והפתרון היחיד (והמגעיל) הוא פשוט לפתוח את רשימת הסקריפטים שהשרות אמור להריץ (ע”י פקודת crontab –e) ופשוט להוסיף איזה רווח ולשמור את הקובץ. (אפשר גם לעשות touch בתוך ספריית ה-cron שנמצאת ב-var/run/cron/ אבל זה קצת יותר מסובך).
  • כדי לבדוק שהכל כשר ורץ, משתמשים בפקודות: cronevents. משום מה כשמריצים crontab כ-Service, הוא לא מואיל בטובו לשמור את הלוגים ב-var/log/cron.log/. למה? שאלה טובה.

קרדיט כמובן מגיע למי שמגיע: כמובן שלא אני זה שמצא את כל הטריקים האלו, אלא היו אחרים ששברו את הראש על כך בעבר.